【问题标题】:What is the difference between object keys with quotes and without quotes?带引号和不带引号的对象键有什么区别?
【发布时间】:2011-05-19 21:47:26
【问题描述】:

有什么区别

obj = {'foo': 'bar'} 

obj = {foo: 'bar'}

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

【问题讨论】:

    标签: javascript


    【解决方案1】:

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

    作为旁注,JSON data exchange format 确实需要在标识符周围加上双引号(不允许允许单引号)。

    【讨论】:

    • 实际上,如果您使用数字文字作为属性名称,引号 可以 会有所不同。例如,obj = { 12e34: true };obj = { '12e34': true }; 不同。前者需要您通过obj['1.2e+35'] 访问该属性,而对于后者,您需要使用obj['12e34']See my answer for more details.
    • 是的,但如果双引号是可选的,给定 a-z 第一个字符 + 字母数字,并且可能有相当多的空白粉丝又名不可见的空格或制表符,那将是非常棒的?非常适合没有深度嵌套的数据。
    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      • 不带引号的键在 JSON 中无效。
      【解决方案4】:

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

      如果属性名称是数字文字或a valid identifier name,则只能省略引号。

      […]

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

      […]

      点表示法可以在属性名称是有效的标识符名称时使用。

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

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

      【讨论】:

      • 这个工具可以救命。感谢您发布此内容。
      • 我正在下悬崖的路上,即将从一个非常陡峭的斜坡上掉下来,朝着一个确定的、彻底的、血腥的死亡方向猛扑过去;但是,唉,我点击了你答案中的一个链接,里面有一个非常简单的 JS 工具,它阻止了我从悬崖上掉下来。这个工具可以救命。
      【解决方案5】:

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

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

      【讨论】:

      • 我不认为这个例子说明了你的想法。您引用的问题是因为jQuery有一个称为size的方法,方法大小和属性大小之间的冲突是通过选择方法来解决的。在 jQuery 中有些情况下,将 Value 作为字符串或其他类型传递会导致行为发生变化,但绝不会通过在引号中而不是在引号中定义具有有效属性名称的属性。
      猜你喜欢
      • 2021-09-18
      • 1970-01-01
      • 2012-10-11
      • 1970-01-01
      • 2012-05-05
      • 1970-01-01
      • 2015-08-16
      • 2014-07-21
      相关资源
      最近更新 更多