此代码失败,并表示无效的JSON异常:JSON解析错误使用jQuery.parseJSON
var example = '{ "AKEY": undefined }';
jQuery.parseJSON(example);
我能够用空字符串替换所有undefineds修复它。未定义不是JSON的一部分吗?
此代码失败,并表示无效的JSON异常:JSON解析错误使用jQuery.parseJSON
var example = '{ "AKEY": undefined }';
jQuery.parseJSON(example);
我能够用空字符串替换所有undefineds修复它。未定义不是JSON的一部分吗?
如果你可以围绕这一点,令牌undefined
实际上是未定义的。
请允许我阐述:尽管JavaScript有所谓不确定的特殊原始值,undefined
是不一个JavaScript关键字也不具有任何特殊含义。通过定义它,您可以通过与undefined
进行比较来打破测试对象存在的代码。
var obj = { BKEY: 'I exist!' };
if (obj.AKEY == undefined) console.log ('no AKEY');
if (obj.BKEY == undefined) console.log ('should not happen');
undefined='uh oh';
if (obj.AKEY == undefined) console.log ('oops!'); // Logically, we want this to execute, but it will not!
if (obj.BKEY == undefined) console.log ('should not happen');
唯一的控制台输出将是'没有AKEY'。在分配给全局变量undefined
后,由于undefined != 'uh oh'
,obj.AKEY == undefined
变为错误。 obj.BKEY == undefined
仍然返回错误,但只是因为我们很幸运。如果我已经设置了obj.BKEY='uh oh'
,那么obj.BKEY == undefined
将是true,即使它实际上存在!
您可能想要明确地将AKEY
设置为null
。 (顺便说一下,null
是一个关键字; null='uh oh'
抛出一个异常)。
你也可以简单地从你的JSON省略AKEY
,在这种情况下,你会发现:
typeof(example.AKEY) == 'undefined'
(如果设置AKEY
到null
,然后typeof(example.AKEY) == 'object'
。)
设置之间的唯一真正的区别为null并省略是否您希望密钥出现在foreach循环中。
不,但是null
是。 RFC 4627 §2.1:
甲JSON值必须是一个对象,数组 数或字符串,或 以下三个文字名称之一:
false null true
var example = '{ "AKEY": null }';
正确。未定义,函数不以JSON表示。 http://www.json.org/js.html
他们不会在JSON允许...看看另类,很明显,为什么:
var example = '{}';
var obj = jQuery.parseJSON(example);
obj.AKEY //undefined
如果是undefined
,当你去访问它,这是一样的钥匙甚至不在场。由于JSON的主要目的是传输数据(否则更广泛的对象字面值语法是好的)......最好将它完全抛弃。
*有*与{{AKEY:undefined}'之间的区别'。对于后者,'AKEY'将显示在''for each''枚举中。 – 2010-11-19 14:39:57
@Matthew - 当你访问它时,没有什么区别......你能想到一个有效的用例,你想查看它枚举和关心,因为它没有被定义? – 2010-11-19 14:40:59
没有。它绝对简化了JSON的东西只是为了空。我只是想指出,有一个区别。 – 2010-11-19 14:43:21