最新消息: 电脑我帮您提供丰富的电脑知识,编程学习,软件下载,win7系统下载。

为什么我们不能像其他普通数组一样通过指定长度等于零来清空Float32Array()数组?在Javascript中

IT培训 admin 4浏览 0评论

为什么我们不能像其他普通数组一样通过指定长度等于零来清空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);
发布评论

评论列表 (0)

  1. 暂无评论