logologo
  • WebUI
  • JavaScript
  • TypeScript
  • C++
  • ··
    • C
    • Rust
    • Python
    • Cangjie
    • SQL
    • Design
    概述
    常见的数据结构
    ecmascript相关
    enumerable
    Object 内部实现
    sameValue 算法
    unicode
    语法设计
    声明
    表达式
    模块
    语句
    严格模式
    类型系统
    Array
    typedArray
    Map
    Number
    Object
    Set
    String
    结构化
    基本的组织元素
    动态性
    并发性
    范式
    函数式
    函数的行为
    闭包
    函数
    从运算式语言到函数式语言
    语言的多范式

    Last Updated: 11/30/2025, 3:14:53 PM

    Previous pageArrayNext pageMap

    #typedArray

    类型化数组

    参考

    • https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Guide/Typed_arrays
    • https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/TypedArray
    • https://web.dev/articles/webgl-typed-arrays?hl=zh-cn

    #概念

    类型化数组和数组是完全不同的数据结构,存储结构和原型方法不相同,。

    类型化数组分为 2 种:

    • 缓存:表示了数据块的对象。它没有格式可言,没有提供访问其内容的机制。必须借助视图来读取。
    • 视图:它提供了上下文(数据类型、起始偏移量和元素数量)来访问缓存中的内存
    分类name名称说明
    缓存ArrayBuffer数组缓冲区类固定长度的原始二进制数据缓冲区的类,无法直接操作
    缓存SharedArrayBuffer共享数组缓冲区类ArrayBuffer 的扩展,允许在多线程之间共享同二进制数据缓冲区
    视图DataView数据视图提供了灵活的读写方式,适合处理不同数据类型和字节对齐的情况
    视图TypedArrayView类型化视图处理同类型的二进制数据

    #ArrayBuffer

    // TODO

    #SharedArrayBuffer

    // TODO

    #DataView

    // TODO

    #TypedArrayView

    类型化视图

    TypeSize(Byte)对应的接口定义(Web-IDL)等效的 C 语言类型Note
    Int8Array1byteint8_t8 位有符号整数(补码)
    Uint8Array1octetuint8_t8 位无符号整数。
    Uint8ClampedArray1octetuint8_t8 位无符号整数(值会被裁剪)
    Int16Array2shortint16_t16 位有符号整数(补码)
    Uint16Array2unsigned shortuint16_t16 位无符号整数
    Int32Array4longint32_t32 位有符号整数(补码)
    Uint32Array4unsigned longuint32_t32 位无符号整数
    Float32Array4unrestricted floatfloat7 位有效数字,如 1.123456)
    Float64Array8unrestricted doubledouble16 位有效数字,如 1.123...15)
    BigInt64Array8bigintint64_t (signed long long)64 位有符号整数(补码)
    BigUint64Array8bigintuint64_t (unsigned long long)64 位无符号整数

    注:特定类型取值范围的计算

    • 二进制中位的状态数: 2,即 [0,1]
    • 每个字节的位数: 8,即[1][2][3][4][5][6][7][8]
    • 每字节的状态数: 2^8 => 256 ,记做 n
    • 无符号整数的取值范围: [0, 256*n]
    • 有符号整数的取值范围: [(256*n)/2, 0, ((256*n)/2)-1]