一、一些JavaScript对象,例如document.getElementsByTagName()返回的NodeList或者函数内部可用的arguments对象,他们表面上看起来,外观和行为像数组,但是不共享他们所有的方法。
1、arguments对象就提供一个length属性,但是不实现forEach()方法
二、Array的原生(prototype)方法可以用来处理类似数组行为的对象
function printArguments() {
Array.prototype.forEach.call(arguments, function(item) {
console.log(item)
})
}
printArguments('test')
// test
三、Array的常规方法也可以用来处理字符串,因为它提供了序列访问字符转为数组的简单方法
Array.prototype.forEach.call('a string', function(chr) {
console.log(chr)
})
// a
//
// s
// t
// r
// i
// n
// g
定义
一、类数组对象示例
let arrayLike = {
'0': 'a',
'1': 'b',
'2': 'c',
length: 3
};
类数组转换的几种方式
见可迭代对象#可迭代对象 / 类数组对象 转换的几种方式:https://www.yuque.com/tqpuuk/yrrefz/okaiah
类数组对象(array-like objects) / 类型化数组(Typed Arrays)
一、JavaScript typed arrays 是类数组对象(array-like object),其提供访问原始二进制数据的机制。
二、 [Array](https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Array)
对象动态增长和收缩,可以有任何JavaScript值。但对于类型化数组,JavaScript引擎执行优化使得这些数组访问速度快速。
三、随着Web应用程序变得越来越强大,添加音频和视频处理等功能、可以使用 WebSockets 、使用原始数据, 这都需要访问原始的二进制数据,所以专门的优化将有助于JavaScript代码能够快速和容易地操纵原始二进制数据类型的数组。
缓冲区和视图:类型化的数组结构
一、为了实现最大的灵活性和效率,JavaScript类型数组被分解为缓冲(Buffer)和视图(views)。
1、缓冲(由ArrayBuffer 实现)是代表数据块的对象,它没有格式可言,并没有提供任何机制来访问其内容。为了访问包含在缓冲区中的内存,您需要使用视图。
2、视图提供了一个上下文,即数据类型、起始偏移量和元素数,这些元素将数据转换为实际类型数组。
ArrayBuffer
一、 ArrayBuffer是一种数据类型,用于表示一个通用的、固定长度的二进制数据缓冲区。你不能直接操纵一个ArrayBuffer中的内容;你需要创建一个数组类型视图或DataView来代表特定格式的缓冲区,并从而实现读写缓冲区的内容。
类型数组视图(Typed array views)
一、类型数组视图具有自描述性的名字,并且提供数据类型信息,例如Int8, Uint32, Float64等等。如一个特定类型数组视图Uint8ClampedArray. 它意味着数据元素只包含0到255的整数值。它通常用于Canvas数据处理
Type | Value Range | Size in bytes | Description | Web IDL type | Equivalent C type |
---|---|---|---|---|---|
Int8Array | -128 to 127 | 1 | 8-bit two’s complement signed integer | byte | int8_t |
Uint8Array | 0 to 255 | 1 | 8-bit unsigned integer | octet | uint8_t |
Uint8ClampedArray | 0 to 255 | 1 | 8-bit unsigned integer (clamped) | octet | uint8_t |
Int16Array | -32768 to 32767 | 2 | 16-bit two’s complement signed integer | short | int16_t |
Uint16Array | 0 to 65535 | 2 | 16-bit unsigned integer | unsigned short | uint16_t |
Int32Array | -2147483648 to 2147483647 | 4 | 32-bit two’s complement signed integer | long | int32_t |
Uint32Array | 0 to 4294967295 | 4 | 32-bit unsigned integer | unsigned long | uint32_t |
Float32Array | 1.2×10-38 to 3.4×1038 | 4 | 32-bit IEEE floating point number (7 significant digits e.g., 1.1234567) | unrestricted float | float |
Float64Array | 5.0×10-324 to 1.8×10308 | 8 | 64-bit IEEE floating point number (16 significant digits e.g., 1.123…15) | unrestricted double | double |
BigInt64Array | -263 to 263-1 | 8 | 64-bit two’s complement signed integer | bigint | int64_t (signed long long) |
BigUint64Array | 0 to 264-1 | 8 | 64-bit unsigned integer | bigint | uint64_t (unsigned long long) |