Javascript 带引号和不带引号的对象键之间有什么区别?
两者之间有什么区别吗Javascript 带引号和不带引号的对象键之间有什么区别?,javascript,Javascript,两者之间有什么区别吗 obj = {'foo': 'bar'} 及 我注意到,当我不使用引号时,您不能在键中使用-。但这真的有区别吗?如果是,哪一个?否,引号没有任何区别(除非,如您所述,您希望使用的键不是有效的JavaScript标识符) 作为旁注,在标识符周围需要双引号(不允许单引号)。这里没有区别。只是风格问题。这样做的原因之一是能够使用“super”或“class”作为键,因为它们是保留关键字 有些人可能会想输入一个带空格的字符串,然后调用o['I can have whitespa
obj = {'foo': 'bar'}
及
我注意到,当我不使用引号时,您不能在键中使用
-
。但这真的有区别吗?如果是,哪一个?否,引号没有任何区别(除非,如您所述,您希望使用的键不是有效的JavaScript标识符)
作为旁注,在标识符周围需要双引号(不允许单引号)。这里没有区别。只是风格问题。这样做的原因之一是能够使用“super”或“class”作为键,因为它们是保留关键字
有些人可能会想输入一个带空格的字符串,然后调用o['I can have whitespace'],但我认为这是一种糟糕的做法。不,不是javascript。但是,当键周围的引号不存在时,一些JSON解析器将失败。来自,我关于这个主题的文章: 只有当属性名称为数字或文字时,才能省略引号 [……] 括号表示法可以安全地用于所有属性名称 [……] 只有当属性名称是有效的标识符名称时,才能使用点表示法 请注意,ES5中允许将保留字用作不带引号的属性名。然而,为了与ES3向后兼容,我还是建议引用它们 我还制作了一个工具,可以告诉您是否可以使用任何给定的属性名,而不使用引号和/或点符号。试试看
在某些情况下,它们是不同的。例如,如果您使用jQuery,并且在调用jQuery$()命令创建元素时要传递一个参数列表,则引号内的单词将转换为参数,非引号内的单词将转换为函数。例如,“size”将设置对象的size属性,size(无引号)将调用对象上的size()函数。请参见底部附近的: 虽然第二个参数很方便,但它的灵活性可能导致意外后果(例如,$(“
”,{size:“4”})调用.size()方法而不是设置size属性)。因此,前面的代码块可以写成:
没有引号的键在JSON中是无效的。实际上,如果您使用数字文字作为属性名,引号可能会有所不同。例如,
obj={12e34:true}
与obj={'12e34':true}不同代码>。前者需要您通过obj['1.2e+35']
访问属性,而后者则需要使用obj['12e34']
。是的,但如果双引号是可选的,给定a-z第一个字符+字母数字,并且可能有相当多的空白或不可见的空格或制表符,那就太棒了?非常适合于没有深度嵌套的数据。我不认为这个例子说明了你所认为的。您提到的问题是因为jQuery有一个名为size的方法,而方法size和属性size之间的冲突可以通过选择该方法来解决。在jQuery中,有些情况下,将值作为字符串或其他类型传递会导致行为发生变化,但决不会因为在引号中定义具有有效属性名称的属性而改变行为。此工具是一个救生工具。谢谢你发这封信。我当时正在下悬崖的路上,正要从一个非常陡峭的斜坡上摔下来,朝着一个确定的、彻底的、血腥的死亡的方向撞去;但是,唉,我点击了你答案中的一个链接,里面有一个非常简单的JS工具,防止我从悬崖上摔下来。这个工具是一个救生工具。
obj = {foo: 'bar'}