我已经完成了一些使用Firefox 4的类型化阵列,并注意到了一些事情。
可以创建的ArrayBuffer
的大小是[0..2147483647]
范围内的整数。传递2147483648
会传递与传递否定号码相同的错误,传递4294967296
会返回空ArrayBuffer
,传递4294967297
会返回长度为{{1}的ArrayBuffer
}}。因此,我假设size值被解释为带符号的32位整数。
虽然默认情况下1
个Int32Array
个对象只能ArrayBuffer
是{4}的倍数,但我很惊讶byteLength
导致new Int32Array(new ArrayBuffer(2147483644));
1}}抛出相同的错误,我会传递一个不是四的倍数的Int32Array
,而另外四个的其他较低倍数确实是ArrayBuffer
大小。
虽然我注意到的第一件事是非常正常的(虽然有点浪费,但有些人已经选择了签名整数),我对我注意到的第二件事特别好奇。这些实现行为是否在任何规范中正式定义?