Mai*_*pal 19 javascript syntax
使用[]和.访问数组或对象属性的真正区别是什么?哪一个使用?
另外为什么.运营商不允许索引属性?
Fel*_*ing 45
访问成员.称为点表示法.使用它们进行访问[]称为括号表示法.
点符号仅适用于有效标识符名称 [spec]的属性名称,因此基本上任何名称也可以是有效的变量名称(有效的标识符,另请参见哪些字符对JavaScript变量名称有效?)和任何保留关键字[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
Run Code Online (Sandbox Code Playgroud)
使用括号表示法:
obj[foo].-),例如obj["my property"].使用点表示法:在所有其他情况下.
关于保留关键字,有一个警告.虽然规范允许将它们用作属性名称并使用点表示法,但并非所有浏览器或工具都遵循这一点(特别是较旧的IE版本).因此,我认为最好的解决方案是避免使用保留关键字作为属性名称,或者如果不能使用括号表示法.
†:这也是您只能使用括号表示法来访问数组元素的原因.标识符不能以数字开头,因此不能只包含数字.
.当您知道该物业的名称时,您应该使用
var object = {};
object.property = 'whatever';
Run Code Online (Sandbox Code Playgroud)
,[]当属性的名称包含在变量中时使用
var object = {};
var property = 'another-property';
object[property] = 'whatever';
Run Code Online (Sandbox Code Playgroud)
由于@DCoder添加了某些对象属性而不使用[]表示法,因为它们的名称会破坏语法.例如,属性named class,default或data-prop-value
也为什么不呢.运营商是否允许索引属性?我真的想要充分的理由.谢谢.
如果可能,请考虑:
var a = 0.5;
Run Code Online (Sandbox Code Playgroud)
您是指数字0.5还是访问该数字的5元素?看到:
Number.prototype[5] = 3;
0[5] //3
0.5 // 0.5
Run Code Online (Sandbox Code Playgroud)
如果你允许语法0.5相等0[5],那么你怎么知道你的意思?
但是,可以直接在对象文字中使用数字:
var a = {
0: 3,
1: 5
};
Run Code Online (Sandbox Code Playgroud)