使用点表示法访问对象的数字属性

Access numeric properties of an object using dot notation

本文关键字:对象 数字 属性 访问 表示      更新时间:2023-09-26

为什么我们不能用点符号而不是括号符号来访问这个类似数组的对象的属性?

function testArray(rat){
  return typeof arguments;
}
console.log(testArray("test")); // "object"
function testArray(rat){
  return arguments.0; // `arguments[0]` works.
}
console.log(testArray("test")); // Throws error.

您的问题似乎是关于为什么我们不能使用这样的点表示法访问数组和类似数组的元素:

const v = a.0;

它在ECMAScript规范中有描述:

点表示法通过以下语法转换来解释:

成员表达式.标识符名称

标识符可能不会像这里描述的那样以数字开头:

标识符名称::
IdentifierStart
标识符名称标识符部件
IdentifierStart::
UnicodeLetter
$
_
'UnicodeEscapeSequence

至于推理,如果标识符名称只是由数字组成,那么很难写出数字文字。一个例外可能只是为数组访问而设计的,但这会使语言变得更加复杂,并偏离常见的C族语法,而不会带来任何实际好处。

您可以:

var arr = [];
arr.foo = 'foo';
console.log(arr.foo); // => 'foo'