JS Uint16Array不会引发任何超出范围的异常

时间:2017-08-21 12:55:46

标签: javascript arrays exception typed-arrays

这是一个愚蠢的问题,但我的代码中有一个错误,因为我在超出范围的索引中向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上有这种行为,为什么它不会引起任何超出范围的异常?

1 个答案:

答案 0 :(得分:1)

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

  

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

您将找到有关TypedArray https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray

的更多信息

奖励:你没有像push, pop...那样的常用方法和这种阵列。