使用括号 (`[]`) 和点 (`.`) 表示法之间的区别 [重复]
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 添加了某些对象属性,如果不使用[]
表示法就无法访问,因为它们的名称破坏了语法。例如。名为 class
、default
或 data-prop-value 的属性
【讨论】:
几个例子会让这个答案真的很棒:) 此外,如果不使用[]
表示法,则无法访问某些对象属性,因为它们的名称破坏了语法。例如。名为 class
、default
或 data-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)
【讨论】:
以上是关于使用括号 (`[]`) 和点 (`.`) 表示法之间的区别 [重复]的主要内容,如果未能解决你的问题,请参考以下文章