有什么区别吗
obj = {'foo': 'bar'}
和
obj = {foo: 'bar'}
我注意到-
当我不使用引号时,您不能在键中使用。但这真的有区别吗?如果是,是哪个?
有什么区别吗
obj = {'foo': 'bar'}
和
obj = {foo: 'bar'}
我注意到-
当我不使用引号时,您不能在键中使用。但这真的有区别吗?如果是,是哪个?
不,引号没有区别(除非,正如您所指出的,您想使用不是有效 JavaScript 标识符的键)。
作为一个侧面说明,JSON数据交换格式 确实需要标识周围的双引号(和它不会让单引号)。
来自JavaScript 中的 Unquoted property names / object keys,我关于这个主题的文章:
如果属性名称是数字文字或有效的标识符名称,则只能省略引号。
[…]
括号表示法可以安全地用于所有属性名称。
[…]
点符号只能在属性名称是有效标识符名称时使用。
请注意,ES5 中允许将保留字用作不带引号的属性名称。但是,为了与 ES3 向后兼容,我建议无论如何都要引用它们。
我还制作了一个工具,它会告诉您是否可以在不使用引号和/或点符号的情况下使用任何给定的属性名称。在mothereff.in/js-properties尝试一下。
这里没有区别。只是风格问题。这样做的原因之一是能够使用“super”或“class”作为键,因为它们是保留关键字。
有些人可能会想传入一个带有空格的字符串,然后调用 o['I can have whitespace'] 但我认为这是不好的做法。
不,不是 javascript。但是,当键周围的引号不存在时,某些 JSON 解析器将失败。
在某些情况下,它们是不同的。例如,如果您使用的是 jQuery,并且在调用 jQuery $() 命令创建元素时正在制作要传递的参数列表,则引用的词将转换为参数,而未引用的词则转换为函数。例如,“size”将设置对象的大小属性,而size(无引号)将调用对象上的size()函数。请参阅底部附近的jQuery():
虽然第二个参数很方便,但它的灵活性可能会导致意想不到的后果(例如 $( "
<input>
", {size: "4"} )调用 .size() 方法而不是设置 size 属性)。因此,前面的代码块可以写成: