使用括号(“)和点(`.`)符号之间的区别

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

另外为什么不呢. 运算符允许索引属性?

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

点符号仅适用于有效的标识符名称 [spec]的属性名称,所以基本上任何名称也将是一个有效的variables名称 (一个有效的标识符 ,另请参阅什么字符是有效的JavaScriptvariables名? )和任何保留的关键字[spec]

括号符号需要一个expression式,其值为一个string(或者可以强制为一个string),所以你可以使用任何字符序列作为属性名称 。 string可以包含的内容没有限制。

例子:

 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 

使用括号表示法:

  • 当属性名称包含在variables中时,例如obj[foo]
  • 属性名称包含标识符中不允许使用的字符,例如以数字开始,或者包含空格或破折号( - ),例如obj["my property"]

使用点符号:在所有其他情况下。

有关于保留关键字的警告 。 尽pipe规范允许将它们用作属性名称和点符号,但并不是所有浏览器或工具都尊重这一点(特别是较早的IE版本)。 所以在我看来最好的解决scheme是避免使用保留关键字的属性名称或使用括号表示法,如果你不能。


†:这也是为什么只能使用括号表示来访问数组元素的原因。 标识符不能以数字开头,因此不能只包含数字。

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

那么如果可能的话,考虑一下:

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

你应该使用. 当你知道财产的名称

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

,当属性名称包含在一个variables中时,使用[]

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

由于@DCoder添加了某些对象属性,因此无法使用[]符号进行访问,因为它们的名称会破坏语法。 例如名为classdefault或data-prop-value的属性

点运算符和索引(括号表示)运算符都用于访问对象的属性。 通常用点运算符访问比较快,因为通过窗口访问variables的速度要慢得多。 但是,如果variables中有特殊字符,则不能使用点运算符,因为它会给出错误。 对于这种情况,我们需要使用索引运算符,并将string格式的variables名称传递给下方的引号,否则会给出未定义的错误。 例如-

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