javascript - 使用括号 (`[]` ) 和点 (`.` ) 表示法之间的区别

标签 javascript syntax

使用 [] 的真正区别是什么?和.用于访问数组或对象属性?使用哪一个?

为什么不 .运算符允许索引属性吗?

最佳答案

使用.访问成员称为点表示法。使用 [] 访问它们称为括号表示法

点符号仅适用于有效的属性名称 identifier names [spec] ,所以基本上任何名称也是有效的变量名称(有效的标识符,另请参阅 What characters are valid for JavaScript variable names? )和任何 reserved keyword [spec] .

括号表示法需要一个计算结果为字符串(或可以强制为字符串)的表达式,因此您可以使用任何字符序列作为属性名称。字符串可以包含的内容没有限制。

示例:

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[“我的属性(property)”]

使用点表示法:在所有其他情况下。

关于保留关键字,有一个警告。虽然规范允许将它们用作属性名称并使用点表示法,但并非所有浏览器或工具都尊重这一点(尤其是较旧的 IE 版本)。因此,我认为最好的解决方案是避免对属性名称使用保留关键字,或者如果不能的话使用括号表示法。

<小时/>

†:这也是只能使用括号表示法来访问数组元素的原因。标识符不能以数字开头,因此不能仅由数字组成。

关于javascript - 使用括号 (`[]` ) 和点 (`.` ) 表示法之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17189642/

相关文章:

Python 语法推理(为什么不像 .django 模板语法那样回退?)

javascript - 甜蜜警报语法

javascript - 删除 Dexterity 内容类型上的字段集选项卡界面

javascript - 我如何知道鼠标指针是否位于 HTML 元素上?

javascript - 跨多个文件将大型 typescript 文件拆分为模块

java - token "<="出现语法错误,删除此 token

javascript - 在 JavaScript 中使用 $.get 时遇到问题

Chrome 控制台输出中 JavaScript 除以零

javascript - 创建一个对象来合并重复文件

sql - 冒号 (':' ) 在 SQL 语法中是什么意思?