Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript限制我的类型化数组长度_Javascript_Arrays - Fatal编程技术网

JavaScript限制我的类型化数组长度

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

我正在尝试从SharedArrayBuffer生成类型化数组

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}`)