这是一个愚蠢的问题,但我的代码中有一个错误,因为我在超出范围的索引中向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
上有这种行为,为什么它不会引起任何超出范围的异常?
答案 0 :(得分:1)
因为它以这种方式定义。也许它会改变,但是现在如果你试图在超出范围的索引中访问(读或写)它将不会引发异常
但是,在类型化数组上获取或设置索引属性不会在原型链中搜索此属性,即使索引超出范围也是如此。
您将找到有关TypedArray https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray
的更多信息奖励:你没有像push, pop...
那样的常用方法和这种阵列。