为什么我们不能像其他普通数组一样通过指定长度等于零来清空Float32Array()数组?在Javascript中
我们假设我们有两个数组。
var normal = new Array(1,2,3,4);
var float32 = new Float32Array(4);
现在可以通过清空正常数组
normal.length = 0;
但是,在float32的情况下,我无法清空数组
float32.lenght = 0;
数组保持不变。为什么??
回答如下:因为你的Float32Array只是一个基础ArrayBuffer的视图,它本身就是一个固定长度的原始二进制数据缓冲区。
有可能简化一点,一旦为ArrayBuffer分配了内存插槽,它将保留在相同的插槽中,您将无法修改其byteLength *。
*实际上,您可以通过传输数据来清空保存数据的对象,即使只是为了清空ArrayBuffer对象而传输它也没有意义,因为您将无法再次更改其长度(无推送):
var arr = new Float32Array(56);
console.log('before transfer', arr.length);
postMessage(arr, '*', [arr.buffer]);
console.log('after transfer', arr.length);
为什么我们不能像其他普通数组一样通过指定长度等于零来清空Float32Array()数组?在Javascript中
我们假设我们有两个数组。
var normal = new Array(1,2,3,4);
var float32 = new Float32Array(4);
现在可以通过清空正常数组
normal.length = 0;
但是,在float32的情况下,我无法清空数组
float32.lenght = 0;
数组保持不变。为什么??
回答如下:因为你的Float32Array只是一个基础ArrayBuffer的视图,它本身就是一个固定长度的原始二进制数据缓冲区。
有可能简化一点,一旦为ArrayBuffer分配了内存插槽,它将保留在相同的插槽中,您将无法修改其byteLength *。
*实际上,您可以通过传输数据来清空保存数据的对象,即使只是为了清空ArrayBuffer对象而传输它也没有意义,因为您将无法再次更改其长度(无推送):
var arr = new Float32Array(56);
console.log('before transfer', arr.length);
postMessage(arr, '*', [arr.buffer]);
console.log('after transfer', arr.length);