JS数组速记
创建一个数组
new Array(长度)
长度,数组里面的数据总数,长度一定是一个非负整数
new Array(数据, 数据, 数据....)
创建一个数组,并初始化其每一项的值
数组项:数组其中的一项数据
[数据,数据,数据,....]
创建一个数据,并初始化其每一项的值
认识数组的本质
数组的本质是一个对象
length属性:数组的长度,会自动变化,值为最大下标+1
数字字符串属性:叫做下标,也叫做索引,相当于数组中每个数据的编号,下标从0开始排列
连续下标的取值范围:0 ~ length -1,如果给length直接赋值,会导致数组可能被截断
实际开发中,不要给length赋值。
下标
通常情况下,下标是连续的。
下标不连续的数组,叫做稀松数组。
数组[长度] = 数据:向数组末尾添加一个数据
delete 数组[下标]: 这种做法不会导致数组其他的属性发生变化,因此,该做法会导致产生稀松数组,所以不推荐使用该做法。
数组清空:
数组.splice(0, 数组.length);
数组.length = 0;
静态成员
from方法:可以将一个伪数组转换为真数组
Array.from(arrayLike, mapFn, thisArg)
arrayLike想要转换成数组的类数组或可迭代对象
mapFn(可选)调用数组每个元素的函数。如果提供,每个将要添加到数组中的值首先会传递给该函数,然后将
mapFn
的返回值增加到数组中。使用以下参数调用该函数:element
数组当前正在处理的元素。
index
数组当前正在处理的元素的索引。
thisArg执行
mapFn
时用作this
的值。isArray方法:判断一个给定的数据,是否为一个真数组
of方法:类似于中括号创建数组,依次赋予数组每一项的值
fromAsync() 允许你从以下对象中创建数组:
异步可迭代对象(如
ReadableStream
和AsyncGenerator
);或者,如果对象不是异步可迭代的,可迭代对象(如
Map
和Set
);或者,如果对象是不可迭代的,类数组的对象(带有
length
属性和索引元素的对象)。
Array.fromAsync()
迭代异步可迭代对象的方式与for await...of
很相似。Array.fromAsync()
在行为上与Array.from()
几乎等价,除了以下几点:Array.fromAsync()
可以处理异步可迭代对象。Array.fromAsync()
返回一个会兑现为数组实例的Promise
。如果使用非异步可迭代对象调用
Array.fromAsync()
,则要添加到数组中的每个元素(无论是否为 Promise)都会先等待其兑现。如果提供了
mapFn
,则其输入和输出会在内部等待兑现。
Array.fromAsync()
和Promise.all()
都可以将一个 promise 可迭代对象转换为一个数组的 promise。然而,它们有两个关键区别:Array.fromAsync()
会依次等待对象中产生的每个值兑现。Promise.all()
会并行等待所有值兑现。Array.fromAsync()
惰性迭代可迭代对象,并且不会获取下一个值,直到当前值被兑现。Promise.all()
预先获取所有值并等待它们全部兑现。
实例成员
at()
在传递非负数时,at()
方法等价于括号表示法。传递负数时array.at(-1)相当于array[array.length - 1]
[Symbol.iterator]
实现了可迭代协议,允许数组 被大多数期望可迭代对象的语法所使用,例如展开语法和 for...of
循环。它返回一个数组迭代器对象,该对象会产生数组中每个索引的值。
ArrayBuffer
ArrayBuffer:一个对象,用于存储一块固定内存大小的数据。
new ArrayBuffer(字节数)
可以通过属性byteLength
得到字节数,可以通过方法slice
得到新的ArrayBuffer
读写ArrayBuffer
使用DataView
通常会在需要混用多种存储格式时使用DataView
使用类型化数组
实际上,每一个类型化数组都对应一个ArrayBuffer,如果没有手动指定ArrayBuffer,类型化数组创建时,会新建一个ArrayBuffer
类型化数组
数字存储的前置知识
计算机必须使用固定的位数来存储数字,无论存储的数字是大是小,在内存中占用的空间是固定的。
n位的无符号整数能表示的数字是2^n个,取值范围是:0 ~ 2^n - 1
n位的有符号整数能表示的数字是2^n个,取值范围是:-2^(n-1) ~ 2^(n-1) - 1
浮点数表示法可以用于表示整数和小数,目前分为两种标准:
32位浮点数:又称为单精度浮点数,它用1位表示符号,8位表示阶码,23位表示尾数
64位浮点数:又称为双精度浮点数,它用1位表示符号,11位表示阶码,52位表示尾数
JS中的所有数字,均使用双精度浮点数保存
类型化数组
类型化数组:用于优化多个数字的存储
具体分为:
Int8Array: 8位有符号整数(-128 ~ 127)
Uint8Array: 8位无符号整数(0 ~ 255)
Int16Array: ...
Uint16Array: ...
Int32Array: ...
Uint32Array: ...
Float32Array:
Float64Array
如何创建数组
new 数组构造函数(长度)
数组构造函数.of(元素...)
数组构造函数.from(可迭代对象)
new 数组构造函数(其他类型化数组)
得到长度
数组.length //得到元素数量
数组.byteLength //得到占用的字节数
其他的用法跟普通数组一致,但是:
不能增加和删除数据,类型化数组的长度固定
一些返回数组的方法,返回的数组是同类型化的新数组