为什么javascript数组元素不能'

Why javascript array element can't be accessed with dot notation?

本文关键字:不能 javascript 数组元素 为什么      更新时间:2023-09-26

为什么不能使用点符号访问数组元素?

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 ); // "yellow"

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

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

为什么x.y中的y是标识符?不知道。在适当的邮件列表或AMA会议中询问语言设计者。我猜测它使语言规范和解释都变得非常容易。

根据javascript的特性,一个对象的属性名可以定义如下…

对象属性名可以是任何有效的JavaScript字符串,或者任何可以转换为字符串的内容,包括空的字符串。但是,任何不是有效JavaScript的属性名标识符(例如,包含空格或连字符的属性名称、或者以数字开头)只能使用平方来访问括号。这个符号在处理属性时也很有用名称将动态确定(当属性名称不是时)在运行时之前确定)。更多…

由于数组的属性名数字开头,因此只能使用square([])括号

访问。

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

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

这是一个古老的问题,但它似乎是最近编辑的,我认为之前的任何答案都没有真正触及到它的核心。

首先,"为什么语言设计者选择禁止以数字开头的标识符?"不是"为什么不能使用点符号访问数组元素?"也就是。这是两个完全不同的问题。

点符号仅用于访问对象成员。数组元素不是对象成员。

你可以想象这样一个数组:

array = {elements: ['element_1', 'element_2'], length: f(), push: f()...}

可以看到,即使允许使用数字标识符,也不能使用array.0访问'element_1'。此外,元素 '成员'是一种特殊的事件,解释器只能通过括号符号来处理(据我所知)。

kieranpotts的回答似乎是一个完美的服务,但误解了一个,对我来说——也许它被否决是因为元素不是属性的想法不够明确。

点符号仅用于访问对象成员。数组元素不是对象成员。

array = {elements: ['element_1', 'element_2'], length: f(), push: f()...} 

您可以看到,您将无法使用array访问'element_1'。

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

括号符号[]用于访问数组的元素。括号符号可以作为访问对象属性的另一种方法。但是相比之下,对于对象属性,点表示法只有。