为什么用点表示法无法访问javascript数组元素?

时间:2015-07-08 20:22:16

标签: javascript arrays

为什么无法使用点表示法访问数组元素?

var arr = ['Apple', 'Mango', 'Pineapple', 'Orange', {name: 'Banana', color: 'yellow'}];

console.log( arr[0] ); // "Apple"
console.log( arr.0 ); // "Apple"
console.log( arr.3 ); // "Orange"
console.log( arr[4].name ); // "Banana"
console.log( arr.4.color ); // "Color"

换句话说,为什么语言设计师选择禁止以数字开头的标识符?

4 个答案:

答案 0 :(得分:9)

因为不允许标识符以数字开头,y中的x.y是标识符。

为什么y中的x.y是标识符?不知道。在相应的邮件列表或AMA会话中询问语言设计人员。我猜测它使语言规范和解释变得更加容易。

答案 1 :(得分:1)

根据javascript的性质,对象的属性名称可以定义为以下...

  

对象属性名称可以是任何有效的JavaScript字符串,或   任何可以转换为字符串的东西,包括空字符串   串。但是,任何不是有效JavaScript的属性名称   标识符(例如,具有空格或连字符的属性名称,   或者以数字开头)只能使用正方形访问   括号表示法。属性时,这种表示法也非常有用   名称将动态确定(当属性名称不是时   确定直到运行时)。   more...

由于数组的属性名称​​以编号开头,因此只能使用square([])括号访问

  

属性名称必须是字符串。这意味着非字符串对象   不能用作对象中的键。任何非字符串对象,包括   一个数字,通过toString方法被转换为字符串。

因此,在点表示法的情况下,它在对象内部查找字符串,并且它永远不会转换点(。)表示法后给出的值。因此obj.1无效且实际上不存在。另一方面,在square([])括号的情况下,值总是被转换为字符串以查找属性

答案 2 :(得分:0)

这是一个古老的问题,但是它似乎是最近被编辑的,而且我认为以前的任何答案都不是真正的问题。

首先,“为什么语言设计者选择禁止以数字开头的标识符?” 不是“为什么无法使用点符号访问数组元素?” 换一种说法。他们是完全不同的问题。

点表示法仅用于访问对象成员。数组元素不是对象成员。

您可以可视化这样的数组:

raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.ElementNotInteractableException: Message: element not interactable

您可以看到,即使允许使用数字标识符,也无法使用array = {elements: ['element_1', 'element_2'], length: f(), push: f()...} 访问'element_1'。而且, elements “成员”是一种特殊的事情,解释器仅通过方括号表示法处理(据我所知)。

在我看来,kieranpotts的答案似乎是一个可以很好地使用但又被误解的答案-也许是被否决了,因为元素不是属性的想法还不够明确。

答案 3 :(得分:-3)

Dot语法仅用于访问对象的属性。它不能用于访问数组的元素。

括号表示法[]用于访问数组的元素。并且括号表示法可以用作访问对象属性的替代方法。但相比之下,点符号对象属性。