这两者之间有什么区别吗?
obj = {'foo': 'bar'}
并且
obj = {foo: 'bar'}
我注意到如果在键中不使用引号,就无法使用-
。但这是否真的有所不同呢?如果有,是什么区别?我注意到当键没有使用引号时,不能在键中使用
-
。但是这是否会导致差异?如果会,那么差异是什么?这两者之间有什么区别吗?
obj = {'foo': 'bar'}
并且
obj = {foo: 'bar'}
我注意到如果在键中不使用引号,就无法使用-
。但这是否真的有所不同呢?如果有,是什么区别?-
。但是这是否会导致差异?如果会,那么差异是什么?以下是有关JavaScript中未用引号括住属性名称/对象键的内容,来源于Mathias Bynens的文章:
只有属性名为数字字面量或有效标识符名称时,才可以省略引号。
[...]
对于所有属性名称,都可以安全地使用方括号表示法。
[...]
仅当属性名称是有效的标识符名称时,才能使用点表示法。
请注意,在ES5中允许将保留字用作未用引号括住的属性名。但出于与ES3的向后兼容性考虑,我建议仍然将其加上引号。
我还制作了一个工具,可告诉您任何给定的属性名称是否可以不用引号和/或使用点表示法。请在mothereff.in/js-properties上尝试它。
这里并没有什么区别,只是一种风格问题。这样做的原因之一是可以使用“super”或“class”作为键,因为这些是保留关键字。
有些人可能会尝试传入带有空格的字符串然后调用o ['I can have whitespace'],但我认为这是不好的做法。
有些情况下它们是不同的。例如,如果您正在使用jQuery,并且要创建一个元素时传递参数列表,带引号的单词会变成参数,而不带引号的单词会变成函数。例如,"size"将设置对象的大小属性,而size(没有引号)将调用对象上的size()函数。请参见jQuery(),位于底部附近:
虽然第二个参数很方便,但其灵活性可能会导致意外后果(例如,$( "
<input>
", {size: "4"} ) 调用.size()方法而不是设置大小属性)。因此,可以将前面的代码块改为:
obj = { 12e34: true };
与obj = { '12e34': true };
不同。对于前者,您需要通过obj['1.2e+35']
访问该属性,而对于后者,则应使用obj['12e34']
。 [请参见我的回答以获取更多详情。] (https://dev59.com/QW855IYBdhLWcg3wbztk#9568622) - Mathias Bynensobj[{}]
将尝试访问属性'[object Object]'
而不是属性'{}'
,因为({}).toString()
是'[object Object]'
而不仅仅是带引号的{}
。 - Vencovsky