JavaScript限制我的类型化数组长度
我正在尝试从SharedArrayBuffer生成类型化数组JavaScript限制我的类型化数组长度,javascript,arrays,Javascript,Arrays,我正在尝试从SharedArrayBuffer生成类型化数组 let count = 4500; let sab = new SharedArrayBuffer(count); let arr = new Int16Array(sab); 现在在运行代码时,我注意到数组的所有组件都没有得到处理。 当我记录阵列的长度时,我得到了以下输出: // when arr = new Int8Array(sab); >> 4500 // when arr = new Int16Array(sa
let count = 4500;
let sab = new SharedArrayBuffer(count);
let arr = new Int16Array(sab);
现在在运行代码时,我注意到数组的所有组件都没有得到处理。
当我记录阵列的长度时,我得到了以下输出:
// when arr = new Int8Array(sab);
>> 4500
// when arr = new Int16Array(sab);
>> 2250
//when arr = new Int32Array(sab);
>> 1125
如果不是Int8Array,则会给出错误的输出。我还尝试了使用不同的count值,发现所有这些值的输出都是错误的。控制台中也没有出现任何错误。这正是
Int8Array
、Int16Array
、Int32Array
和Float64Array
类的功能构建方式。在类型化数组上MDN文档的图像中,您可以看到这些数组被称为数组缓冲区
每个深度有两倍大小的项,16字节对8字节,依此类推,因此是长度的一半。基数是8。因此,当您将计数设置为4500
时,Int8Array将反映相同的数字,但超过该数字的每个深度(Int16Array
,Int32Array
,以及Float64Array
)将在每一步中将该计数减少一半
您可以在操作中看到这一点,以及此处的Float64Array
函数:
let count=9000;
设sab=新的SharedArrayBuffer(计数);
设sab_深度=[
['Int8Array',新的Int8Array(sab)],
['Int16Array',新的Int16Array(sab)],
['Int32Array',新的Int32Array(sab)],
['Float64Array',新的Float64Array(sab)]
];
log(`Count:${Count}`)
sab_depts.forEach(([depth,array])=>console.log(`${depth}:${array.length}`)代码>