// 在内存中分配两个字节并声明一个DataView const buf = new ArrayBuffer(2); const view = new DataView(buf);
// 填充缓冲,让第一位和最后一位都是1 view.setUint8(0, 0x80); // 设置最左边的位等于1 view.setUint8(1, 0x01); // 设置最右边的位等于1
// 缓冲内容(为方便阅读,人为加了空格) // 0x8 0x0 0x0 0x1
// 1000 0000 0000 0001
// 按大端字节序读取Uint16
// 0x80 是高字节,0x01 是低字节
// 0x8001 = 2^15 + 2^0 = 32768 + 1 = 32769 alert(view.getUint16(0)); // 32769
// 按小端字节序读取Uint16
// 0x01 是高字节,0x80 是低字节
// 0x0180 = 2^8 + 2^7 = 256 + 128 = 384 alert(view.getUint16(0, true)); // 384
// 按大端字节序写入Uint16 view.setUint16(0, 0x0004);
// 缓冲内容(为方便阅读,人为加了空格) // 0x0 0x0 0x0 0x4
// 0000 0000 0000 0100
alert(view.getUint8(0)); // 0
alert(view.getUint8(1)); // 4
// 按小端字节序写入Uint16 view.setUint16(0, 0x0002, true);
// 缓冲内容(为方便阅读,人为加了空格) // 0x0 0x2 0x0 0x0
// 0000 0010 0000 0000
alert(view.getUint8(0)); // 2
alert(view.getUint8(1)); // 0
1. 边界情形:
DataView 完成读、写操作的前提是必须有充足的缓冲区,否则就会抛出 RangeError:
const buf = new ArrayBuffer(6);
const vi服务器托管网ew = new DataView(buf);
// 尝试读取部分超出缓冲范围的值 view.getInt32(4);
// RangeError
// 尝试读取超出缓冲范围的值 view.getInt32(8);
// RangeError
// 尝试读取超出缓冲范围的值 view.getInt3服务器托管网2(-1);
// RangeError
// 尝试写入超出缓冲范围的值 view.setInt32(4, 123); // RangeError
DataView 在写入缓冲里会尽最大努力把一个值转换为适当的类型,后备为 0。如果无法转换,则 抛出错误:
const buf = new ArrayBuffer(1);
const view = new DataView(buf);
view.setInt8(0, 1.5);
alert(view.getInt8(0)); // 1
view.setInt8(0, [4]);
alert(view.getInt8(0)); // 4
view.setInt8(0, 'f'); 8 alert(view.getInt8(0)); // 0
view.setInt8(0, Symbol());
// TypeError
2. 定型数组:
定型数组是另一种形式的 ArrayBuffer 视图。虽然概念上与 DataView 接近,但定型数组的区别 在于,它特定于一种 ElementType 且遵循系统原生的字节序。相应地,定型数组提供了适用面更广的 API 和更高的性能。
设计定型数组的目的就是提高与 WebGL 等原生库交换二进制数据的效率。由于定 型数组的二进制表示对操作系统而言是一种容易使用的格式,JavaScript 引擎可以重度优化算术运算、 按位运算和其他对定型数组的常见操作,因此使用它们速度极快。
创建定型数组的方式包括读取已有的缓冲、使用自有缓冲、填充可迭代结构,以及填充基于任意类 型的定型数组。另外,通过.from()和.of()也可以创建定型数组:
// 创建一个 12 字节的缓冲
const buf = new ArrayBuffer(12);
// 创建一个引用该缓冲的Int32Array
const ints = new Int32Array(buf);
// 这个定型数组知道自己的每个元素需要 4 字节
// 因此长度为3
alert(ints.length); // 3
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
机房租用,北京机房租用,IDC机房托管, http://www.fwqtg.net
odoo16前端框架分析1 boot.js odoo16的前端基于owl组件系统,这是一个类似vue,react的现代js服务器托管网框架。 前端框架都放在了web模块中,具体的位置是addons/web/static/src 不过今天要说的不是owl,而是跟…