我用螢火來測試這兩種情況下,他們似乎由結果非常相似:{active:「yes」}和{「active」:「yes」}有什麼區別?
>>> var x = {"active": "yes"}
>>> x.active
"yes"
>>> var x = {active: "yes"}
>>> x.active
"yes"
但我敢肯定有這兩條,甚至性能相關的差異之間存在差異。底線 - 我想知道{active:「yes」}和{「active」:「yes」}是否有區別。
我用螢火來測試這兩種情況下,他們似乎由結果非常相似:{active:「yes」}和{「active」:「yes」}有什麼區別?
>>> var x = {"active": "yes"}
>>> x.active
"yes"
>>> var x = {active: "yes"}
>>> x.active
"yes"
但我敢肯定有這兩條,甚至性能相關的差異之間存在差異。底線 - 我想知道{active:「yes」}和{「active」:「yes」}是否有區別。
兩者都有效。然而,有些關鍵字不能像delete
那樣使用,所以爲了避免將它們用引號括起來,所以它們不會被ECMAScript解析器逐字地處理,而是明確指定爲字符串。
此外,JSON spec要求鍵有他們周圍的報價:
的字符串開始和
引號
結束,因此{key:'value'}
不是有效的JSON,但有效的JS,而{"key":"value"}
是有效的JS和JSON。
例子:
>>> ({delete:1})
SyntaxError: Unexpected token delete
>>> ({'delete':1})
Object
又如:
>>> ({first-name:'john'})
SyntaxError: Unexpected token -
>>> ({'first-name':'john'})
Object
>>> ({'first-name':'john'})['first-name']
"john"
兩者都是有效的JavaScript(雖然有些名字只能用引號,active
不在其中)。
後者是無效的JSON(在JSON中引用的名稱是強制性的)。
+1,重要的區別是一個是JSON,另一個不是。 – molf 2010-10-22 16:21:43
@molf:技術上都不是JSON;) – 2010-10-22 16:24:49
@Roatin:對不起?什麼不是JSON關於'{「active」:「是」}? – 2010-10-22 16:44:39
在JavaScript中,{"active": "yes"}
,{'active': "yes"}
,{"active": 'yes'}
和{active: 'yes'}
都是一樣的 - 如果你使用的是保留的關鍵字(如MEDER指出的),你必須報價的關鍵 - 否則,關鍵並不需要被引用。
在JSON,而另一方面所有鍵和值必須與"
引用。
{"active": "yes"}
是有效的JSON。
{'active': "yes"}
,{"active": 'yes'}
和{active: 'yes'}
沒有。
如果您將此用於JSON,則名稱(active
)必須用引號引起來。它仍然可以在沒有它的情況下在JavaScript中工作,但它在技術上是格式不正確的JSON。
請參閱:http://json.org/
請注意,object
需要string
作爲名稱(冒號前的位)。
每一個有效的JSON也是有效的JavaScript,但並不是每一個有效的JavaScript也是有效的JSON作爲JSON是JavaScript的一個子集:
JSON⊂的JavaScript
JSON需要名字的名字/值對在JavaScript沒有的時候被引用(只要它們不是保留關鍵字)。
所以你的第一個例子{"active": "yes"}
是有效的JSON和有效的JavaScript,而第二個例子{active: "yes"}
只是有效的JavaScript。
許多JSON解析不會處理未引用的屬性。在Chrome中,例如:'JSON.parse('{「a」:3}')'可以,'JSON.parse('{a:3}')'引發異常。 – 2010-10-22 16:21:11
實際上'{「key」:'value'}'由於key和_string_值的雙引號的要求而不是有效的JSON。 – mogsie 2010-10-22 20:13:05
@Marcel J .:許多JSON解析器不會處理這個問題,因爲{{:3}'不是有效的JSON。 – Thanatos 2010-10-22 20:29:07