此代碼失敗,並表示無效的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