一个类型化数组(TypedArray)对象描述了一个底层的二进制数据缓冲区(binary data buffer)的一个类数组视图(view)。事实上,没有名为 TypedArray 的全局属性,也没有一个名为 TypedArray 的构造函数。相反,有许多不同的全局属性,它们的值是特定元素类型的类型化数组构造函数。

TypedArray 指的是以下的其中之一

Int8Array();
Uint8Array();
Uint8ClampedArray();
Int16Array();
Uint16Array();
Int32Array();
Uint32Array();
Float32Array();
Float64Array();

描述

ECMAScript 2015 定义了一个 TypeArray 构造器作为所有的类型化数组构造器(Int8Array, Int16Array 等)的原型([[Prototype]])。该构造器并不会直接暴露出来:即没有全局的 %TypedArray% 和 TypeArray 属性,只能通过使用类似于 Object.getPrototypeOf(Int8Array.prototype) 的方式直接访问。所有的类型化数组构造器都会继承 %TypeArray% 构造器函数的公共属性和方法。此外,所有的类型化数组的原型(如 Int8Array.prototype)都以 %TypeArray%.prototype 作为原型。

%TypedArray% 构造器自身不是特别有用,直接调用或使用 new 表达式实例化都会抛出一个TypeError 异常,除非在支持子类化(subclassing)创建对象的 JS 引擎下运行。但直到现在还没有这样的 JS 引擎出现。因此 %TypeArray% 仅仅在对所有的类型化数组构造器(Int8Array 等)的方法和属性进行 polyfill 的时候比较有用.

当创建一个 TypedArray 实例(如 Int8Array)时,一个数组缓冲区将被创建在内存中,如果一个 ArrayBuffer 对象被当作参数传给构造函数,那么将使用传入的 ArrayBuffer 代替(即缓冲区被创建到 ArrayBuffer 中)。缓冲区的地址被存储在实例的内部属性中,并且所有 %TypedArray%.prototype上的方法,例如 set value 和 get value 等,都会在这个数组缓冲区上进行操作。

属性访问

你可以使用标准数组索引语法获取类型化数组中的元素(也就是和访问普通数组元素一样,如 foo[1]),然而,在类型化数组上获取或者设置属性的值时,并不会在这个属性的原型链中进行搜索,即使在索引超出了边界的时候。在原型中添加的属性将会在 ArrayBuffer 中查询而不是在对象的属性中。但是你依然可以像其他对象一样使用命名的属性来访问(foo.bar 的形式);具体见下面的例子:

// 使用标准数组语法来获取和设置属性值
var int16 = new Int16Array(2);
int16[0] = 42;
console.log(int16[0]); // 42// 原型中添加的属性访问不到(此时索引值未超边界,20 < 32)
Int8Array.prototype[20] = "foo";
(new Int8Array(32))[20]; // 0// 即使索引值超出了边界也一样不能访问(20 > 8)
Int8Array.prototype[20] = "foo";
(new Int8Array(8))[20]; // undefined// 使用负数索引也不行
Int8Array.prototype[-1] = "foo";
(new Int8Array(8))[-1]; // undefined// 但是可以使用命名属性的方式访问到
Int8Array.prototype.foo = "bar";
(new Int8Array(32)).foo; // "bar"

总结

ArrayBuffer 对象用来表示通用的、固定长度的原始二进制数据缓冲区。它是一个字节数组,通常在其他语言中称为“byte array”。

const buffer = new ArrayBuffer(8);console.log(buffer.byteLength);
// expected output: 8

你不能直接操作 ArrayBuffer 的内容,而是要通过类型数组对象或 DataView 对象来操作,它们会将缓冲区中的数据表示为特定的格式,并通过这些格式来读写缓冲区的内容。

const buffer = new ArrayBuffer(8);
const view = new Int32Array(buffer);

类型化数组是 Javascript 操作(内存)二进制数据的一个接口。类型化数组是建立在 ArrayBuffer 对象的基础上的。它的作用是,分配一段可以存放数据的连续内存区域。ArrayBuffer 作为内存区域,可以存放多种类型的数据。不同数据有不同的存储方式,这就叫做“视图”。目前,JavaScript 提供以下类型的视图。

Javascript 操作二进制数据相关推荐

  1. html5 二进制数据解析,JavaScript读写二进制数据的方法详解

    前言 二进制是计算技术中广泛采用的一种数制.二进制数据是用0和1两个数码来表示的数,如果想要在前端中处理音频和视频.那你必须要对二进制数据有很好地掌握和操作能力.下面话不多说了,来一起看看详细介绍的吧 ...

  2. JavaScript与二进制数据的恩怨情仇

    文章出自个人博客https://knightyun.github.io/2020/03/09/js-binary-data,转载请申明 编程江湖,终日血雨腥风,论及二进制数据,又有多少豪杰谈笑风生,风 ...

  3. sqlite 操作二进制数据

    sqlite 操作二进制数据需要用一个辅助的数据类型:sqlite3_stmt * . 这个数据类型记录了一个"sql语句".为什么我把 "sql语句" 用双引 ...

  4. Javascript 处理二进制数据:JavaScript typed arrays

    原文中文链接:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Typed_arrays 原文英文链接:https://developer ...

  5. java jdbc datetime_Java JDBC 操作二进制数据、日期时间

    二进制数据 mysql提供了四种类型来存储二进制数据: TinyBlob    最多可存储255字节 Blob   最多可存储65KB MediumBlob    最多可存储16MB LongBlob ...

  6. h5如何上传文件二进制流_HTML5新特性之文件和二进制数据的操作

    http://www.cnblogs.com/jscode/archive/2013/04/27/3572239.html 历史上,JavaScript无法处理二进制数据.如果一定要处理的话,只能使用 ...

  7. 微软字节javascript 类型数组读取二进制数据 -java教程

    每日一贴,今天的内容关键字为微软字节 先建一个文件,按UTF-16大端 BOM 格式存保一个符字串:hi aleck, 用使 file API 把他按二进制方法取读到浏览器. 文件取读方法在这里: h ...

  8. 整理javascript操作文件说明.

    Javascript是网页制作中离不开的脚本语言,依靠它,一个网页的内容才生动活泼.富有朝气.但也许你还没有发现并应用它的一些更高级的功能吧?比如,对文件和文件夹进行读.写和删除,就象在VB.VC等高 ...

  9. [JavaScript]为JS处理二进制数据提供可能性的WEB API

    写这篇博客的起源是在div.io上的一篇文章<你所不知道的JavaScript数组>by 小胡子哥下的评论中的讨论. 因为随着XHR2和现代浏览器的普及,在浏览器当中处理二进制不再向过去那 ...

最新文章

  1. sybase Invalid command line argument 'and'.
  2. 道家遁甲式(又名道家奇门)
  3. 为什么要叫python-为什么叫Python
  4. (需求实战_进阶_03)SSM集成RabbitMQ 路由模式关键代码讲解、开发、测试
  5. 图像处理库Pillow
  6. Kubernetes Job Controller源码分析
  7. NumpyPandas内置函数实现分组
  8. 【当心】看房没戴头盔,损失二十万 。。。
  9. java ssm网上超市购物管理系统
  10. 如何使用光盘启动计算机,电脑如何设置光驱启动 电脑设置光驱启动方法【图文】...
  11. 生成验证码时,验证码图片不显示,报错信息如下:Can‘t create output stream;Can‘t create cache file
  12. python做一段有意思的代码_Python爬虫入门有意思的小长代码
  13. 自动机器学习-H2O.ai
  14. 数据可视化_科学统计图表5——ggplot绘制南丁格尔玫瑰图
  15. .dwg(sw)-exb
  16. HDU 1873 优先队列 Java版
  17. HTML 与HTML5 常用标签
  18. java中处理换行符
  19. 扫描IP软件,无线AP忘记IP地址
  20. 算术优化算法AOA(学习笔记_10)

热门文章

  1. 超10000支团队参赛,阿里云首届云原生编程挑战赛完美收官
  2. 腾讯云 AI 在新基建领域下一盘什么大棋
  3. TIOBE 6 月编程语言排行榜:C 与 Java 进一步拉开差距、Rust 跃进 TOP 20
  4. “谷歌杀手”发明者,科学天才 Wolfram
  5. 捐款捐物捐技术,14 家科技巨头抗疫在行动!
  6. Android 开发者成神之路!
  7. 如何轻松使用 C 语言实现一个栈?​
  8. 华为有意向西方公司出售 5G 技术;iOS 13 被爆漏洞;GNOME 3.34 正式发布| 极客头条...
  9. @程序员:别人身边的小姐姐是这样来的,你能学学吗
  10. 数十篇推荐系统论文被批无法复现:源码、数据集均缺失!