使用[]
和.
访问数组或对象属性的真正区别是什么?使用哪一种?
另外为什么.
运营商不允许使用 index 属性?
使用[]
和.
访问数组或对象属性的真正区别是什么?使用哪一种?
另外为什么.
运营商不允许使用 index 属性?
访问成员.
称为点符号。访问它们[]
称为括号符号。
点符号仅适用于作为有效标识符名称 [spec] 的属性名称,因此基本上任何名称也是有效的变量名称(有效标识符,另请参阅哪些字符对 JavaScript 变量名称有效?)和任何保留关键字[规格] .
括号表示法需要一个计算结果为字符串(或可以强制为字符串)的表达式,因此您可以使用任何字符序列作为属性 name。字符串可以包含的内容没有限制。
例子:
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 版本)。因此,我认为最好的解决方案是避免对属性名称使用保留关键字,或者如果不能,则使用括号表示法。
†:这也是您只能使用括号表示法访问数组元素的原因。标识符不能以数字开头,因此不能只由数字组成。
.
当您知道属性名称时应该使用
var object = {};
object.property = 'whatever';
,[]
当属性名称包含在变量中时使用
var object = {};
var property = 'another-property';
object[property] = 'whatever';
由于@DCoder 添加了某些对象属性,因此在不使用[]
表示法的情况下无法访问它们,因为它们的名称破坏了语法。例如,名为class
、default
或 data-prop-value 的属性
还有为什么没有。运算符允许索引属性?我真的想要充分的理由。谢谢你。
好吧,如果可能的话,请考虑:
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 abc = {
font-size : "12px"
}
Using dot operator - abc.font-size; //it will give error (Incorrect)
Using index operator - abc["font-size"]; //12px (Correct)