diff --git a/lib/utils.js b/lib/utils.js
--- a/lib/utils.js
+++ b/lib/utils.js
@@ -472,6 +472,7 @@ function jsonStringify(object, spaces, depth) {
         break;
       case 'boolean':
       case 'regexp':
+      case 'symbol':
       case 'number':
         val = val === 0 && (1 / val) === -Infinity // `-0`
           ? '-0'
@@ -597,6 +598,7 @@ exports.canonicalize = function(value, stack) {
     case 'number':
     case 'regexp':
     case 'boolean':
+    case 'symbol':
       canonicalizedObj = value;
       break;
     default:

diff --git a/test/acceptance/utils.js b/test/acceptance/utils.js
--- a/test/acceptance/utils.js
+++ b/test/acceptance/utils.js
@@ -331,6 +331,15 @@ describe('lib/utils', function () {
 
       stringify(a).should.equal('{\n  "foo": 1\n}');
     });
+
+    // In old version node.js, Symbol is not available by default.
+    if (typeof global.Symbol === 'function') {
+      it('should handle Symbol', function () {
+        var symbol = Symbol('value');
+        stringify(symbol).should.equal('Symbol(value)');
+        stringify({symbol: symbol}).should.equal('{\n  "symbol": Symbol(value)\n}')
+      });
+    }
   });
 
   describe('type', function () {

Diff doesn't be displayed when object has Symbol value
When I assert an object that has a `Symbol` value, the test doesn't display diff even if it fails. For example, the following test fails without generating diff.

``` javascript
// test.js
const assert = require('assert');

it('should generate diff', () => {
  const obj = { type: Symbol('foo') };
  assert.deepEqual(obj, { type: null });
});
```

result:

![mocha-symbol-before](https://cloud.githubusercontent.com/assets/12684251/12785091/01ee67a0-cace-11e5-83f9-34577f1872cb.png)

Then I found the `stringify` function in [lib/utils](https://github.com/mochajs/mocha/blob/master/lib/utils.js) throws a following error when the argument object has a `Symbol` value.

```
TypeError: Cannot convert a Symbol value to a string
```

environment:
- mocha: v2.4.5
- node: v4.2.2

