【发布时间】:2017-01-01 15:50:03
【问题描述】:
我有一个带有 TypedArray 成员的对象,我想冻结它以防止在设置数据后对其进行修改。尝试冻结 TypedArray 或它的 ArrayBuffer 并没有像我预期的那样运行。出于好奇,我想知道它为什么会这样。我正在运行 node 4.4.4 和 Chrome,它的行为或多或少是相同的。
var typedArray = new Uint32Array(4);
typedArray[0] = 10;
typedArray[1] = 20;
Object.freeze(typedArray);
// throws TypeError : Cannot freeze array buffer views with elements(...)
我尝试的下一件事是冻结底层 ArrayBuffer
Object.freeze(typedArray.buffer); // Does not throws errors
Object.isFrozen(typedArray.buffer); // returns true
typedArray[0] = 50; // Successfully modifies the data, despite the buffer is frozen
我知道我可以更改我的设计以不保留原始缓冲区,并在需要时从数据成员中重建它。但我只是对这种行为感到好奇。
谢谢
【问题讨论】:
标签: javascript node.js google-chrome typed-arrays