由类数组转数据的方法引伸出
/**
* 创建数组的多种方式:
* + 数组对象字面量
* + new Array
* + Array.from(es6)
* + Array.of(es6)
* + Array.prototype.slice, Array.prototype.concat 等返回数组的方法
*/
let try1 = {
0: '1',
1: '2',
length: 2
}
const set = new Set('hello')
console.log([...set])
console.log(Array.from('abc'))
console.log(Array.of(1, 23))
console.log(Array.apply(null, try1))
console.log(Array.prototype.slice.call(try1))
console.log(Array.prototype.concat.apply([], try1))
复习:可迭代&类数组
可迭代对象是指具有Symbol.iterator属性的对象。该属性是一个函数,用于返回一个迭代器对象。迭代器对象是一个具有next()方法的对象,用于按照一定顺序迭代访问对象的元素。
可迭代对象可以通过for...of循环进行迭代,也可以使用扩展运算符(...)将其转换为数组。常见的可迭代对象包括数组、字符串、Set、Map等。
类数组是指具有类似数组的特性,但实际上并不是真正的数组。它们通常是对象,具有从0开始的整数索引和length属性,但缺少数组的一些方法和属性,如push()、pop()等。
类数组对象可以使用Array.from()方法将其转换为真正的数组,也可以通过扩展运算符(...)进行转换。常见的类数组对象包括arguments对象、DOM集合(如NodeList、HTMLCollection)等。
Array.from()
Array.from()可以从可迭代或类数组对象创建一个新的浅拷贝的数组实例。
console.log(Array.from('zoom'));
// Expected output: Array ["z", "o", "o", "m"]
Array.from()有一个可选的参数mapFn,该参数允许你在创建数组时为每个元素执行一个函数,类似于map()
console.log(Array.from([1, 2, 3], (x) => x + x));
// Expected output: Array [2, 4, 6]
Array.of()
Array.of()方法通过可变数量的参数创建一个新的Array实例,而不考虑参数的数量或类型。
console.log(Array.of('foo', 2,true));
// Expected output: Array ["foo", 2,true]
console.log(Array.of());
// Expected output: Array []
console.log(Array.of(2));
// Expected output: Array [2]
注意:
Array.of()和Array()构造函数之间的区别在于对单个参数的处理:Array.of(3)创建一个具有单个元素3的数组,而Array(3)创建一个 3 个空槽组成的数组 而不是由 3 个undefined组成的数组
console.log(Array.of(3));
// Expected output: Array [3]
console.log(new Array(3));
Array构造函数会根据给定的元素创建一个 JavaScript 数组,但是当仅有一个参数且为数字时除外,当传递给Array构造函数的唯一参数是介于 0 到 232 - 1(含)之间的整数,这将返回一个新的 JavaScript 数组,其length属性设置为该数字