为什么DataView默认是Big Endian?

Dom*_*nik 5 javascript endianness

有人可以解释一下,为什么 DataView 使用字节顺序吗Big Endian?当我们的计算机正在使用Little Endian. 还有ARM处理器。

Uint32Array()已经使用的类型化数组Little Endian。我认为这是正确的。

// DataView (Big Endian)
const dataview = new DataView(new ArrayBuffer(4));
dataview.setUint32(0, 42);
console.log(new Uint8Array(dataview.buffer).toString());
// result: 0,0,0,42

// Typed Array (Little Endian)
const typearray = new Uint32Array([42]);
console.log(new Uint8Array(typearray.buffer).toString());
// result: 42,0,0,0
Run Code Online (Sandbox Code Playgroud)

我期望数字类型采用小端序。这并不一致。我知道 DataView 方法的可选参数litleEndian。但我的问题是:为什么默认情况下没有设置?

FBe*_*rgo 0

这是 ECMAscript 标准定义的 setUint32 方法的原型:

24.2.4.20 DataView.prototype.setUint32 ( byteOffset, value [ , littleEndian ] )https://www.ecma-international.org/ecma-262/6.0/#sec-dataview-constructor)。

该值是存储为小端还是大端由可选的第三个参数定义,其默认值由标准定义为 false(存储为大端)。

Big Endian 是所有 TCP/IP 网络协议的默认字节顺序,而且这种情况并不罕见。