2009-04-07 56 views
6

在大多數JSON序列化器/反序列化器中,javascript字典/散列數組中的「鍵」部分被寫爲字符串。爲什麼JS hash/dict中的「key」部分應該是一個字符串?

使用字符串作爲鍵的好處是什麼,而不是僅僅輸入預期的名稱?

例如,假設我定義了兩個對象​​和k2像這樣:

var k1 = { a: 1, b: 2, c: 3 };   // define name normally 
var k2 = { "a": 1, "b": 2, "c": 3 }; // define name with a string 

然後我跑了以下測試:

alert(k1 == k2);     // false (of course) 

alert(k1.a == k2.a);    // true 
alert(k1["b"] == k2["b"]);   // true 

alert(uneval(k1));     // returns the k1 object literal notation. 
alert(uneval(k2));     // returns the same string as above line. 

alert(uneval(k1) == uneval(k2)); // true 

那麼什麼是具有關鍵是點如k2那樣定義了雙引號(字符串),而不是像定義的​​那樣輸入密鑰名稱?


我剛纔看到在Ajaxian這種過度指着Aaron Boodman's blog entry

chromium.tabs.createTab({ 
"url": "http://www.google.com/", 
"selected": true, 
"tabIndex": 3 
}); 

因爲他也使用駱駝案例的tabIndex,我沒有看到任何一點在使用字符串在所有。

爲什麼不:

chromium.tabs.createTab({ 
url: "http://www.google.com/", 
selected: true, 
tabIndex: 3 
}); 

爲什麼會JS忍者如下轉向urlselectedtabIndex成一個字符串的約定?

回答

6

因爲JSON是實際的JavaScript文字語法的子集。爲了簡化實現JSON解析器,雙引號總是需要在字符串周圍,而JSON中的鍵是字符串,它們在那裏是必需的。

並非所有合法的JavaScript都是合法的JSON。雖然您可以在不使用引號的JavaScript中定義對象字面值,但如果您希望可互操作的JSON,則需要將它們放入。

1

因爲這樣做,您可以避免錯誤地使用javascript保留關鍵字,例如「do」。使用字符串符號使您保持安全。

0

如果json.org上的語法圖是可信的,則純字的屬性名是非標準的。你有多少瀏覽器運行你的測試?

+0

沒有太多......但我*保持巨大的JavaScript應用程序在工作。我一直使用裸詞(例如創建類和類),它可以在所有主流瀏覽器中使用...... IE FF Opera Safari。 – chakrit 2009-04-07 18:40:29

+0

JSON是JavaScript的子集。它需要引號,但JavaScript不會。 – 2009-04-08 13:25:02

0

除了從你所可以實際使用的保留關鍵字無論走在你的屬性名稱的字符 - 包括空格,冒號...

真的不知道爲什麼要這麼做。我更喜歡使用正常的「對象」符號。

相關問題