这是一个愚蠢的问题,但是我在代码中出错,因为我在超出范围的索引处向Uint16Array添加值。但是JS引擎没有引发任何错误,似乎对附加值没有做任何事情。

例如 :

>> var uint16 = new Uint16Array(2);
>> uint16[0] = 42;
>> uint16[1] = 32;
>> uint16[2] = 12;
>> uint16
Uint16Array(2) [42, 32]


标准JS数组将附加新值并增加数组大小。

>> var arr = new Array(2);
>> arr[0] = 42;
>> arr[1] = 32;
>> arr[2] = 12;
>> arr
(3) [42, 32, 12]


有人知道为什么我们在Uint16Array上有这种行为以及为什么它没有引发任何超出范围的异常吗?

最佳答案

因为它是用这种方式定义的。也许它会改变,但是现在如果您尝试以超出范围的索引访问(读取或写入),它将不会引发异常。


  但是,即使在索引超出范围的情况下,在类型化数组上获取或设置索引属性也不会在原型链中搜索该属性。


您将找到有关TypedArray https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray的更多信息。

还有一个好处:这种数组没有像push, pop...这样的常用方法。

09-20 19:01