// This tests JSON correctly behaves with Symbol. function shouldBe(actual, expected) { if (actual !== expected) throw new Error('bad value: ' + actual); } shouldBe(JSON.stringify(Symbol('Cocoa')), undefined); var object = {}; var symbol = Symbol("Cocoa"); object[symbol] = 42; object['Cappuccino'] = 42; shouldBe(JSON.stringify(object), '{"Cappuccino":42}'); shouldBe(JSON.stringify(object, [ Symbol('Cocoa') ]), "{}"); // The property that value is Symbol will be ignored. shouldBe(JSON.stringify({ cocoa: Symbol('Cocoa'), cappuccino: Symbol('Cappuccino') }), '{}'); shouldBe(JSON.stringify({ cocoa: Symbol('Cocoa'), cappuccino: 'cappuccino', [Symbol('Matcha')]: 'matcha' }), '{"cappuccino":"cappuccino"}'); var object = {foo: Symbol()}; object[Symbol()] = 1; shouldBe(JSON.stringify(object), '{}'); // The symbol value included in Array will be converted to null shouldBe(JSON.stringify([ Symbol('Cocoa') ]), '[null]'); shouldBe(JSON.stringify([ "hello", Symbol('Cocoa'), 'world' ]), '["hello",null,"world"]'); var array = [Symbol()]; shouldBe(JSON.stringify(array), '[null]');