This question already has answers here:
JavaScript property access: dot notation vs. brackets?
(13个回答)
3年前关闭。
使用
另外,为什么
使用括号表示法:
当属性名称包含在变量中时,例如 属性名称包含标识符中不允许的字符,例如以数字†开头,或包含空格或破折号(
使用点表示法:在所有其他情况下。
关于保留关键字,有一个注意事项。尽管规范允许将它们用作属性名称并带有点符号,但并非所有浏览器或工具都将其作为引用(特别是较旧的IE版本)。因此,我认为最好的解决方案是避免对属性名称使用保留关键字,或者如果不能的话,避免使用括号表示法。
†:这也是为什么只能使用方括号表示法访问数组元素的原因。标识符不能以数字开头,因此不能仅由数字组成。
(13个回答)
3年前关闭。
使用
[]
和.
访问数组或对象属性的真正区别是什么?使用哪一个?另外,为什么
.
运算符不允许index属性? 最佳答案
使用.
访问成员称为点表示法。用[]
访问它们称为括号符号。
点表示法仅适用于有效identifier names 的属性名称,因此基本上任何也可以是有效变量名(有效标识符,另请参见What characters are valid for JavaScript variable names?)和任何reserved keyword 的名称。
括号表示法需要一个表达式,该表达式的结果为字符串(或可以强制为字符串),因此可以将任何字符序列用作属性名。字符串可以包含什么没有限制。
例子:
obj.foo; // valid
obj.else // valid, reserved keywords are valid identifier names
obj.42 // invalid, identifier names cannot start with numbers
obj.3foo // invalid, ""
obj.foo-bar // invalid, `-` is not allowed in identifier names
obj[42] // valid, 42 will be coerced to "42"
obj["--"] // valid, any character sequence is allowed
obj[bar] // valid, will evaluate the variable `bar` and
// use its value as property name
使用括号表示法:
obj[foo]
。 -
),例如obj["my property"]
。 使用点表示法:在所有其他情况下。
关于保留关键字,有一个注意事项。尽管规范允许将它们用作属性名称并带有点符号,但并非所有浏览器或工具都将其作为引用(特别是较旧的IE版本)。因此,我认为最好的解决方案是避免对属性名称使用保留关键字,或者如果不能的话,避免使用括号表示法。
†:这也是为什么只能使用方括号表示法访问数组元素的原因。标识符不能以数字开头,因此不能仅由数字组成。