Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/455.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 带引号和不带引号的对象键之间有什么区别?_Javascript - Fatal编程技术网

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'}