这段代码失败,并带有指示无效JSON的异常:
var example = '{ "AKEY": undefined }'; jQuery.parseJSON(example);
我可以通过用空字符串替换所有未定义内容来修复它。undefined不是JSON的一部分吗?
如果您可以解决这个问题,那么 令牌 undefined实际上是未定义的。
undefined
请允许我详细说明:即使JavaScript具有称为undefined的特殊原始值,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');
唯一的控制台输出将是“ no AKEY”。分配给全局变量后undefined,obj.AKEY == undefined由于变为false _undefined_ != 'uh oh'。 obj.BKEY == undefined仍然返回false,但这仅仅是因为我们很幸运。如果我已经设定obj.BKEY='uh oh',那obj.BKEY == undefined将是 真的 , 即使它确实存在 !
obj.AKEY == undefined
_undefined_ != 'uh oh'
obj.BKEY == undefined
obj.BKEY='uh oh'
您可能需要显式设置AKEY为null。(顺便说一句,null 是 一个关键字;null='uh oh'引发异常)。
AKEY
null
null='uh oh'
您也可以简单地AKEY从JSON中省略,在这种情况下,您会发现:
typeof(example.AKEY) == 'undefined'
(如果设置AKEY为null,则为typeof(example.AKEY) == 'object'。)
typeof(example.AKEY) == 'object'
设置为null和忽略之间的唯一真正区别是您是否希望密钥出现在foreach循环中。