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

Posted

技术标签:

【中文标题】使用括号 (`[]`) 和点 (`.`) 表示法之间的区别 [重复]【英文标题】:Difference between using bracket (`[]`) and dot (`.`) notation [duplicate] 【发布时间】:2013-06-15 21:26:22 【问题描述】:

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

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

【问题讨论】:

“为什么不”是什么意思。运算符允许索引属性”? 【参考方案1】:

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

点表示法仅适用于有效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["my property"]

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

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


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

【讨论】:

如你所说的标识符名称不能以数字开头,其他规则是什么,你能说明或提供任何链接 我已经在答案中提供了一个链接。点击“标识符名称”。 也看看***.com/questions/1661197/…。【参考方案2】:

当您知道属性的名称时,您应该使用.

var object = ;
object.property = 'whatever';

,当属性名称包含在变量中时使用[]

var object = ;
var property = 'another-property';
object[property] = 'whatever';

由于@DCoder 添加了某些对象属性,如果不使用[] 表示法就无法访问,因为它们的名称破坏了语法。例如。名为 classdefault 或 data-prop-value 的属性

【讨论】:

几个例子会让这个答案真的很棒:) 此外,如果不使用 [] 表示法,则无法访问某些对象属性,因为它们的名称破坏了语法。例如。名为 classdefaultdata-prop-value 的属性。 @DCoder:保留关键字可以用点符号访问。 @FelixKling:不幸的是,我在 IE 8 中遇到了相反的情况。 @DCoder:好吧,让我们说根据规范这是可能的...无论如何我对 IE 的期望不高;) 就我个人而言,我避免一起为属性名称保留关键字。【参考方案3】:

还有为什么不。运算符允许索引属性?我真的很想 充分的理由。谢谢。

如果可能,请考虑:

var a = 0.5;

您是指数字0.5 还是访问数字的5 元素? 见:

Number.prototype[5] = 3;

0[5] //3
0.5 // 0.5

如果您允许语法0.5 等于0[5],那么您怎么知道您的意思?

然而,可以直接将数字与对象字面量一起使用:

var a = 
    0: 3,
    1: 5
;

【讨论】:

【参考方案4】:

点运算符和索引(括号符号)运算符都用于访问对象的属性。通常使用点运算符访问会更快,因为通过窗口访问变量要慢得多。但是在特殊字符的情况下 在变量中,您不能使用点运算符,因为它会给出错误。对于这种情况,我们需要使用索引运算符并将变量名作为字符串格式传递,这意味着双引号,否则会给出未定义的错误。 例如-

var abc = 
    font-size : "12px"
 
Using dot operator - abc.font-size;           //it will give error (Incorrect)
Using index operator - abc["font-size"];      //12px (Correct)

【讨论】:

以上是关于使用括号 (`[]`) 和点 (`.`) 表示法之间的区别 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

二叉树经典题之根据二叉树创建字符串(二叉树的括号表示法)

乘法“*”和点乘“.*”&除法“/”和点除“./”区别

Unity 之 Vector3 类简介

django框架之BBS项目之文章详情和点赞

阿里巴巴Java 开发手册编程规约之代码格式

JS之对象