改进的数组功能
new Array()
的怪异行为,当构造函数传入一个数值型的值
,那么数组的length属性会被设为该值;如果传入多个值,此时无论这些值是不是数值型的,都会变为数组的元素。这个特性另人困惑,你不可能总是注意传入数据的类型,所以存在一定的风险。
Array.of()
无论传多少个参数,不存在单一数值的特例(一个参数且数值型),总是返回包含所有参数的数组。
let items = Array.of(1,2);
console.log(items.length); //2
console.log(items[0]); // 1
console.log(items[1]); // 2
items = Array.of(2);
console.log(items.length); //1
console.log(items[0]); //2
items = Array.of("2");
console.log(items.length); //1
console.log(items[0]); //"2"
Array.from()
将类数组对象转成数组对象来使用,Array.from()
调用基于arguments对象中的元素创建一个新数组,args是Array的一个实例,包含arguments对象中同位置的相同值。如下:
function doSomthing(){
var args = Array.from(arguments);
// 使用args
}
// 可以提供一个映射函数作为Array.from()的第二个参数,这个函数用来将类数组对象中的每一个值转换成其他形式
// 还有第三个参数,是用来绑定上下文的
function translage(){
return Array.from(arguments,(value)=>value+1)
}
let numbers = translage(1,2,3)
console.log(numbers) // 2,3,4
// 可以转换可迭代对象
let numbers = {
*[Symbol.iterator](){
yield 1;
yield 2;
yield 3;
}
}
let number2 = Array.from(numbers,(value)=>value+1)
console.log(numbers2) // 2,3,4
所有对象的新方法
- find() 和 findIndex()方法
- fill()
- copyWithin
定型数组
一种用于处理数值类型(正如其名,不是所有类型)数据的专用数组。
定型数组的使用要先创建数据缓冲区
let buffer = new ArrayBuffer(10) // 分配10个节节
console.log(buffer.byteLength) // 10
也以可以使用slice
方法分割已有数组缓冲区来创建一个新的,这个slice()方法与数组上的slice()方法很像,传入开始索引和结束索引作为参数,然后返回一个新的ArrayBuffer实例,新实例由原始数组缓冲区的切片组成。
let buffer = new ArrayBuffer(10)
let buffer2 = buffer.slice(2,6);
console.log(buffer2.byteLength) //2
通过视图操作数组缓冲区
先创建ArrayBuffer实例,然后再用这个实例来创建新的DataView
let buffer = new ArrayBuffer(10),
view = new DataView(buffer);
// view对象可以访问缓冲区中所有10个字节,如果提供一个表示比特偏移的数值,那么这个缓冲区的其中一部分来创建视图
view = new DataView(buffer,5,2); // 包含位于索引5和6的字符
- 通过以下几个属性可以获取视图信息
- buffer 绑定的数组缓冲区
- byteOffset 默认是0
- byteLength
读取写入数据
js有8种数值型数据类型,对于其中的每一种,都能在DataView的原型上找到相应的数组缓冲区中写入数据和读取数据的方法。这些方法名都以set或get打头,紧跟着是每种数据类型的缩写,如下:
getInt8(byteOffset,litteEndian)
setInt8(byteOffset,litteEndian)
getUnit8(byteOffset,litteEndian)
setUnit8(byteOffset,litteEndian)
- ...
let buffer = new ArrayBuffer(10),
view = new DataView(buffer);
view.setInt8(0,5);
view.setInt8(1,-1);
console.log(view.getInt16(0)); //1535
console.log(view.getInt8(0)); //5
console.log(view.getInt8(1)); //-1
定型数组是视图
- 定型数组与普通数组的相似之处
- 差别
主题测试文章,只做测试使用。发布者:Walker,转转请注明出处:https://joyjs.cn/archives/4336