const buffer = new ArrayBuffer(16); const int32View = new Int32Array(buffer); for (let i = 0; i < int32View.length; i++) { int32View[i] = i * 2; }
上面代码生成一个 16 字节的ArrayBuffer
对象,然后在它的基础上,建立了一个 32 位整数的视图。由于每个 32 位整数占据 4 个字节,所以一共可以写入 4 个整数,依次为 0,2,4,6。
在栈中是这样的
6 15 00000000 14 00000000 13 00000000 12 00000110
4 11 00000000 10 00000000 9 00000000 8 00000100
2 7 00000000 6 00000000 5 00000000 4 00000010
0 3 00000000 2 00000000 1 00000000 0 00000000
如果在这段数据上接着建立一个 16 位整数的视图,则可以读出完全不一样的结果。
const int16View = new Int16Array(buffer); for (let i = 0; i < int16View.length; i++) { console.log("Entry " + i + ": " + int16View[i]); } // Entry 0: 0 // Entry 1: 0 // Entry 2: 2 // Entry 3: 0 // Entry 4: 4 // Entry 5: 0 // Entry 6: 6 // Entry 7: 0
在栈中是这样的
0 15 00000000 14 00000000 6 13 00000000 12 00000110 0 11 00000000 10 00000000 4 9 00000000 8 00000100 0 7 00000000 6 00000000 2 5 00000000 4 00000010 0 3 00000000 2 00000000 0 1 00000000 0 00000000