当我通过索引获取数组元素值时,在javascript中调用什么内部方法?

Pin*_*nal 4 javascript

我有一些wtfjs代码:

var a = [,];
alert(a.indexOf(a[0]));
Run Code Online (Sandbox Code Playgroud)

a.indexOf(a[0])回报-1.这个例子的要点是uninitializedundefined值之间的区别:

a 包含一个未初始化的元素.

a[0]回来undefined.

a不包含undefined值.所以a.indexOf(a[0]) === -1true.

但在哪里我可以找到解释为什么a[0]回归undefined?调用什么内部方法?

PS Undefined是javascript原始类型.Uninitialized表示没有任何javascript类型的值,但javascript中没有这样的原始类型.

Jam*_*ice 6

ES5规范告诉我们以下数组初始化器:

未定义Elided数组元素.

请注意,它们未定义.这与拥有价值不同undefined.正如您已经注意到的那样,省略的元素确实有助于数组的长度:

...缺少的数组元素有助于数组的长度并增加后续元素的索引.

indexOf数组上调用时,这是发生的步骤之一:

kPresent是使用参数ToString(k)调用O的[[HasProperty]]内部方法的结果.

在那里,k是一个对应于数组索引的数字,并且O是数组本身.由于未定义省略元素,因此数组没有相应索引的属性.