2017-09-18 48 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