Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

你熟悉 Typed Arrays 吗? 如果熟悉,请解释他们与 JavaScript 中的传统数组相比的异同? #546

Open
Rashomon511 opened this issue Jul 15, 2019 · 0 comments

Comments

@Rashomon511
Copy link
Owner

一个TypedArray 对象描述一个底层的二进制数据缓存区的一个类似数组(array-like)视图
JavaScript的TypedArray分为两个部分:缓冲区和视图

  • 缓 冲区由ArrayBuffer实现,一个缓冲区是一个代表某个数据块的对象。它没有格式,而且没有提供一个机制来访问或操纵其中的内容。为了存取缓冲区中 的内容,你需要创建一个视图。视图提供了一个环境(context),包括数据类型、起始偏移量以及元素数量。它把数据转化为实际上的类型化数组。
  • 视图由 ArrayBufferView和它的一些子类实现

ArrayBufferView的子类:
下面的子类提供了特定的缓冲区视图,用来处理不同类型的数据。要注意的是,如果要处理的数据类型超过一字节,将使用平台对应的端序。如果需要操作端序,可以使用DataView来代替ArrayBufferView。
Int8Array 、Uint8Array、Int16Array、Uint16Array、Int32Array、Uint32Array、Float32Array、Float64Array

ArrayBufferView的父类:

  • DataView:DataView提供了一个底层接口来从ArrayBuffer中存取数据
  • StringView:​StringView提供了一个构建于ArrayBuffer之上的C语言风格的字符串操作接口(比如说字符编码的数组,类似JavaScript中的ArrayBufferView)

操作更复杂的数据结构

var buffer = new ArrayBuffer(24);
var idView = new Uint32Array(buffer, 0, 1);
var usernameView = new Uint8Array(buffer, 4, 16);
var amountDueView = new Float32Array(buffer, 20, 1);

转换成普通的数组

var typedArray = new Uint8Array( [ 1, 2, 3, 4 ] ),
normalArray = Array.apply( [], typedArray );
normalArray.length === 4;
normalArray.constructor === Array;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant