如何正确的使用ES6扩展运算符

  介绍

这期内容当中小编将会给大家带来有关如何正确的使用ES6扩展运算符,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

扩展运算符<代码> 语法传播又叫展开语法,写法是……,顾名思义,其实是用来展开字符串,数组和对象的一种语法,可以在函数调用/数组构造时,将数组表达式或者<代码>字符串> 键值> //函数调用:   myFunction (…iterableObj);//字面量数组构造或字符串:   […iterableObj & # 39; 4 & # 39;……& # 39;你好# 39;6);//构造字面量对象时,进行克隆或者属性拷贝(ECMAScript 2018规范新增特性):   让objClone={…obj};

在函数调用时使用扩展运算符相当于使用<代码> Function.prototype。应用:

函数myFunction (x, y, z) {}
  var args=(0, 1, 2);
  myFunction (…args);//相当于
  函数myFunction (x, y, z) {}
  var args=(0, 1, 2);
  myFunction。应用(null, args); 

和<代码> 应用不同的是,我们不仅可以将全部参数放到一个数组中,还可以只将其中几个参数用扩展运算符展开,并且可以再一次调用中多次使用扩展运算符。

函数myFunction (a, b, c, d, e) {
  控制台。日志(a, b, c, d, e);//1 0 1 2 3
  console.log(参数);//静问縶& # 39;0 & # 39;:1 & # 39;1 & # 39;:0,& # 39;2 & # 39;:1 & # 39;3 & # 39;:2 & # 39;4 & # 39;:3}
  }
  var args=[0, 1];
  myFunction (1,…args, 2,…[3]); 

使用<代码> 新关键字来调用构造函数时,不能直接使用数组加上<代码> 应用的方式(<代码> 申请执行的是调用<代码>[[说]]> [[制造]])>

 var datefield=[1970, 0, 1];//1970年1月1日
  var d=新的日期(…datefield); 

如果想要不使用扩展运算符实现同样的效果,我们必须用一个函数包装构造函数,将这个新的构造函数的<代码> 原型设为原构造函数的实例,用<代码> Object.create (constructor.prototype)> 构造函数。>

函数applyAndNew(构造函数,args) {
  函数部分(){
  构造函数返回。应用(这个,args);
  }
  如果类的构造函数。===& # 39;原型对象# 39;){
  部分。原型=Object.create (constructor.prototype);
  }
  返回部分;
  }
  
  函数myConstructor () {
  console.log(& # 39;参数。长度:& # 39;+ arguments.length);
  console.log(参数);
  这一点。prop1=& # 39; val1 # 39;;
  这一点。prop2=& # 39; val2 # 39;;
  }
  
  var myArguments=[& # 39;你好# 39;& # 39;与# 39;,& # 39;是# 39;,& # 39;你们# 39;,& # 39;先生# 39;,null);
  var myConstructorWithArguments=applyAndNew (myConstructor myArguments);
  
  控制台。日志(新myConstructorWithArguments ());//(myConstructor构造函数中):参数。长度:6//(myConstructor构造函数中):[“hi",“how",“are",“你:,“mr",零)//(“新myConstructorWithArguments"中):{prop1:“val1" prop2:“val2"} 

当然用的最多的还是在字面量数组上,没有展开语法的时候,只能组合使用,拼接,concat等方法,来将已有数组元素变成新数组的一部分。有了展开语法,通过字面量方式,构造新数组会变得更简单,更优雅:

 

可以用来实现数组浅拷贝:

 arr var=(1、2、3);
  var arr2=arr […];//像arr.slice ()
  arr2.push (4);//arr2此时变成(1、2、3、4)//加勒比海盗不受影响

连接多个数组:

 var arr1=(0, 1, 2);
  var arr2=(3、4、5);
  var arr3=[…arr1……arr2); 

扩展运算符还可以将已有对象的所有可枚举(<代码>可列举的> 象征属性,但不包含原型上的属性和方法。如果同时拷贝多个对象,后面的对象会覆盖前面对象的同名属性。

 var其中obj1={foo: & # 39;酒吧# 39;,x: 42岁(符号(& # 39;一个# 39;)]:123};
  var methoda={foo: & # 39;巴兹# 39;,x: 100年,杨:13};
  
  var clonedObj={…其中obj1};
  console.log (clonedObj);//{foo: & # 39;酒吧# 39;,x: 42岁[符号(a)]: 123}
  
  var mergedObj={…其中obj1,……methoda};
  console.log (mergedObj);//{foo: & # 39;巴兹# 39;,x: 100年,杨:13日[符号(a)]: 123} 

如何正确的使用ES6扩展运算符