JSON Parse Error Using jQuery.parseJSON

后端 未结 4 1766
情深已故
情深已故 2020-12-12 04:29

This code fails with an exception indicating invalid JSON:

var example = \'{ \"AKEY\": undefined }\';
jQuery.parseJSON(example);

I was able

4条回答
  •  北荒
    北荒 (楼主)
    2020-12-12 04:52

    If you can wrap your head around this, the token undefined is actually undefined.

    Allow me to elaborate: even though JavaScript has a special primitive value called undefined, undefined is not a JavaScript keyword nor does it have any special meaning. You can break code which tests for the existance of an object by comparing to undefined by defining it.

    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');
    

    The only console output will be 'no AKEY'. After we've assigned to the global variable undefined, obj.AKEY == undefined becomes false because undefined != 'uh oh'. obj.BKEY == undefined still returns false, but only because we're lucky. If I had set obj.BKEY='uh oh', then obj.BKEY == undefined would be true, even though it actually exists!

    You probably want to explicity set AKEY to null. (By the way, null is a keyword; null='uh oh' throws an exception).

    You could also simply omit AKEY from your JSON, in which case you would find:

    typeof(example.AKEY) == 'undefined'
    

    (If you set AKEY to null, then typeof(example.AKEY) == 'object'.)

    The only real difference between setting to null and omitting is whether you want the key to appear in a foreach loop.

提交回复
热议问题