带引号和不带引号的对象键有什么区别?

IT技术 javascript
2021-01-23 07:50:51

有什么区别吗

obj = {'foo': 'bar'} 

obj = {foo: 'bar'}

我注意到-当我不使用引号时,您不能在键中使用。但这真的有区别吗?如果是,是哪个?

5个回答

不,引号没有区别(除非,正如您所指出的,您想使用不是有效 JavaScript 标识符的键)。

作为一个侧面说明,JSON数据交换格式 确实需要标识周围的双引号(和它不会让单引号)。

是的,但是如果给定 az 第一个字符 + 字母数字并且双引号是可选的,并且可能有相当多的空白粉丝又名不可见的空格或制表符,那将会很棒吗?非常适合没有深度嵌套的数据。
2021-03-13 07:50:51
实际上,如果您使用数字文字作为属性名称,引号可能会有所不同。例如,obj = { 12e34: true };obj = { '12e34': true };. 前者将要求您通过 访问该属性obj['1.2e+35'],而对于后者,您将使用obj['12e34']. 有关更多详细信息,请参阅我的答案。
2021-03-26 07:50:51

来自JavaScript 中的 Unquoted property names / object keys,我关于这个主题的文章:

如果属性名称是数字文字或有效的标识符名称,则只能省略引号

[…]

括号表示法可以安全地用于所有属性名称。

[…]

点符号只能在属性名称是有效标识符名称时使用。

请注意,ES5 中允许将保留字用作不带引号的属性名称。但是,为了与 ES3 向后兼容,我建议无论如何都要引用它们。

我还制作了一个工具,它会告诉您是否可以在不使用引号和/或点符号的情况下使用任何给定的属性名称。mothereff.in/js-properties尝试一下

截屏

我正从悬崖上掉下来,即将从一个非常陡峭的斜坡上摔下来,朝着某个彻底的、血腥的死亡猛扑过去;但是,唉,我点击了你答案中的一个链接,其中有一个非常简单的 JS 工具,它防止我掉下悬崖。这个工具是救命稻草。
2021-03-16 07:50:51
这个工具是救命稻草。感谢您发布此信息。
2021-04-06 07:50:51

这里没有区别。只是风格问题。这样做的原因之一是能够使用“super”或“class”作为键,因为它们是保留关键字。

有些人可能会想传入一个带有空格的字符串,然后调用 o['I can have whitespace'] 但我认为这是不好的做法。

不,不是 javascript。但是,当键周围的引号不存在时,某些 JSON 解析器将失败。

没有引号的键在 JSON 中无效。
2021-03-13 07:50:51

在某些情况下,它们是不同的。例如,如果您使用的是 jQuery,并且在调用 jQuery $() 命令创建元素时正在制作要传递的参数列表,则引用的词将转换为参数,而未引用的词则转换为函数。例如,“size”将设置对象的大小属性,而size(无引号)将调用对象上的size()函数。请参阅底部附近的jQuery()

虽然第二个参数很方便,但它的灵活性可能会导致意想不到的后果(例如 $( " <input>", {size: "4"} )调用 .size() 方法而不是设置 size 属性)。因此,前面的代码块可以写成:

我不认为这个例子说明了你的想法。你引用的问题是因为jQuery有一个方法叫size,方法size和属性size的冲突是通过选择方法解决的。在 jQuery 中,有些情况下,将Value作为字符串或其他类型传递会导致行为发生变化,但绝不会定义具有引号中的有效属性名称而不是引号中的属性。
2021-03-17 07:50:51