js中的展开语法/剩余语法

2020-12-27  本文已影响0人  乔一丁_2020强化班

展开语法(Spread syntax)

语法

//函数调用
myFunction(...iterableObj);
//字面量数组构造或 字符串 :
[...iterableObj, '4', ...'hello', 6];
//构造字面量对象时,进行克隆或者属性拷贝(ECMAScript 2018规范新增特性)
let objClone = { ...obj };

用法

1.等价于Function.apply(),传入数组,会被迭代为函数的参数

function func(a,b,c){}
var arr = [1,2,3];
func.apply(null,arr);
//等价于
function func(a,b,c){}
var arr = [1,2,3];
func(...arr);

2.在构造时(此时传值不同于apply,因为它调用的是Call而不是Construct)

function applyAndNew(constructor, args) {
  function partial () {
    return constructor.apply(this, args);
  };
  if (typeof constructor.prototype === "object") {
    partial.prototype = Object.create(constructor.prototype);
  }
  return partial;
}

3.构造字面量数组/对象

//拷贝数组
var arr = [1, 2, 3];
var arr2 = [...arr]; // 像是arr.slice()
/*实际上, 展开语法和 Object.assign() 行为一致, 
执行的都是浅拷贝(只遍历一层)。
如果想对多维数组进行深拷贝还需要自己写历遍*/
var a = [[1], [2], [3]];
var b = [...a];
b.shift().shift(); // 1
// Now array a is affected as well: [[], [2], [3]]
object.assign(target,src);
//将src(可枚举属性)的值复制到target,并返回target
上一篇 下一篇

猜你喜欢

热点阅读