2017-09-18 50 views
2

對於JavaScript對象,對於它的屬性,我通常不會爲其添加單引號。我記得如果我添加一個單引號到一個對象的屬性,它將成爲一個JSON?我對嗎?爲什麼要將單引號添加到對象的屬性

請看這段代碼,兩段代碼都會輸出對象的值。請解釋一下,我是否需要爲對象的屬性添加單引號?

var test1 = { 
    foo: 'foo1', 
    bar: 'bar1' 
}; 
alert(test1.foo); 

var test2 = { 
    'foo': 'foo1', 
    'bar': 'bar1' 
}; 
alert(test2.foo); 

https://jsfiddle.net/azp9wj0x/

+0

JSON對屬性名稱使用雙引號。請注意,即使你在這裏使用它們,它仍然不會是JSON,它仍然是一個對象字面量。請參閱[JSON和對象文字符號之間的區別?](https://stackoverflow.com/questions/2904131/what-is-the-difference-between-json-and-object-literal-notation) –

+0

它會在這兩種情況下仍然是JavaScript對象字面值。您不需要單引號,但如果由於某種原因,您的屬性名稱違反了標準命名約定(如空格),則可以使用引號。 – lintmouse

+0

單引號是文字字符串。當值包含特殊字符(如「\ n」)時,使用雙引號。 – schylake

回答

2

記住,JSON只tangentally與JavaScript和是a spec separate from JavaScript itself

單引號是不是有效的JSON。雙引號是。然而,這是無關緊要的,因爲這是JavaScript代碼,它對於你如何定義事物更加寬容。

只有當您將應用程序之外的傳輸序列化時,JSON纔會發揮作用。在這種情況下,它其實並不重要,你如何定義你的數據:

var test1 = { 
    foo: 'foo1', 
    bar: 'bar1' 
}; 

JSON.stringify(test1, null, 2); 

這將適當編碼爲JSON不管你採用單,雙,或沒有引號中的一切。

+0

「單引號無效JSON」但如果將「名稱」更改爲「名稱」,則此(https://www.w3schools.com/js/tryit.asp?filename=tryjson_send)仍可以讀取該名稱。請解釋。謝謝。 – user8565199

+0

將JavaScript對象**轉換爲** JSON。你寫的不是JSON。 – Quentin

+0

@ user8565199使用[JSON驗證程序](http://jsonlint.com)驗證JSON,而不是JavaScript。您還將通過將任意JSON裝訂到GET請求的末尾而快速*地陷入困境。你應該使用POST。 – tadman

2

ES5中的對象字面值中的屬性名稱可以是標識符或字符串文字(ES6添加了一些更多的選項,但這是by)。

沒有引號,它是一個標識符。用引號,它是一個字符串。

使用字符串可以使用不是有效標識符的屬性名稱(例如那些在其中包含空格的屬性名稱)。

這與JSON無關。 JavaScript是JavaScript。 JSON是JSON。


JSON是受JavaScript語法語法啓發的數據格式。在JSON屬性名稱中,必須是是字符串,字符串必須用"字符分隔。

+0

「用引號,它是一個字符串」。在這裏,你的意思是單引號還是雙引號?這是否重要? – user8565199

+0

要麼。 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Grammar_and_types#String_literals – Quentin