数组的静态方法---------- Array.of()、Array.from()和Array.isArray()

Array.of()

方法创建一个具有可变数量参数的新数组实例,而不考虑参数的数量或类型

参数:任意个参数,将按顺序成为返回数组中的元素。参数为空就是返回一个空数组

console.log(Array.of(4, 7, 9));  // (3) [4, 7, 9]

返回值就是一个将参数按照顺序组成的一个数组

使用此方法可以创建一个新数组,这个方法主要就是为了弥补构造函数的不足,当使用构造函数创建一个数组只有一个元素6时:

console.log(new Array(6)); // (6) [empty × 6]

只创建了六个元素为空的数组,长度,不符合预期,而使用Array.of()方法就不会出现这种情况
该方法是es6的方法,IE低版本不兼容,可以使用slice进行兼容

if (!Array.of) {
  Array.of = function() {
    return Array.prototype.slice.call(arguments);
  };
}

Array.from()

方法从一个类似数组或可迭代对象创建一个新的,浅拷贝的数组实例
语法

Array.from(arrayLike[, mapFn[, thisArg]])

参数:
arrayLike:要转化成数组的伪数组或者可迭代的对象
mapFn:可选,函数,若指定了该函数,那么arrayLike中的每一个元素都会执行一遍该函数
thisArg:可选;指定mapFn中的this

类数组和可迭代的对象

  • 类数组:拥有一个 length 属性(Number类型)和若干索引属性的任意对象。比如说arguments,string,类似document.getElementsByClassName() 的返回结果,文件对象FileList
  • 可迭代对象(可以获取对象中的元素,如 Map和 Set 等)

一个参数

function test(){
  console.log(Array.from(arguments)); // (4) ["23", 647, true, {…}]
  console.log(arguments); // Arguments(4) ["23", 647, true, {…}, callee: ƒ, Symbol(Symbol.iterator): ƒ]
}
test('23', 647, true, {name: "zhansan"})

传入回调函数

function test() {
  console.log(
    Array.from(arguments, function(item, index){
      console.log(item); // 参数item就是数组的每一个成员,index就是成员的下标
      console.log(this); // 全局调用函数,this指向window
      return item + 1
    }) // (5) [2, 3, 4, 5, 6], 实现每一个元素加一
  );
}

test(1, 2, 3, 4, 5)

Array.isArray()

同于判断一个对象是否是一个数组,IE9一下不支持

参数:要判断的对象
返回值:布尔值:如果是数组返回true,反之false

console.log(Array.isArray([1, 4, 6]));  // true
console.log(Array.isArray({a: 2, b: 7})); // false
            
function test(){
  console.log(Array.isArray(arguments)); // false
}
            
test()

如果不存在该方法可以

if (!Array.isArray) {
  Array.isArray = function(arg) {
    return Object.prototype.toString.call(arg) === '[object Array]';
  };
}

你可能感兴趣的:(数组的静态方法---------- Array.of()、Array.from()和Array.isArray())