为什么无法使用点表示法访问数组元素?
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"
换句话说,为什么语言设计师选择禁止以数字开头的标识符?
答案 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语法仅用于访问对象的属性。它不能用于访问数组的元素。
括号表示法[]用于访问数组的元素。并且括号表示法可以用作访问对象属性的替代方法。但相比之下,点符号仅对象属性。