Js es6中扩展运算符(...)

拓展运算符,是es6一个很好的特性,它们可以通过减少赋值语句的使用,或者减少通过下标访问数组或对象的方式,使代码更加简洁优雅,可读性更佳。下面我将列出拓展运算符的主要应用场景,以及相关知识。

1、在函数调用时使用拓展运算符。

以前如果我们想将数组元素迭代为函数参数使用,一般使用Function.prototype.apply的方式。

function myFunction(x, y, z) {
  console.log(x+""+y+""+z);
}
var args = [0, 1, 2];
myFunction.apply(null, args);

有了展开语法,我们可以这样写。

function myFunction(x, y, z) {
  console.log(x+""+y+""+z);
} 

var args = [0, 1, 2];
myFunction(...args);

提示: ...arr返回的并不是一个数组,而是各个数组的值。只有[...arr]才是一个数组,所以...arr可以用来对方法进行传值

2、数组和对象的拷贝。

var arr1 = [1,2,3];
var arr2 = [...arr1];
arr2.push(4);

console.log(arr1 === arr2);  // false
console.log(arr1); // [1,2,3]
console.log(arr2);// [1,2,3,4]

对象也是一样,也可以使用拓展运算符

var obj1 = {
  a:1,
  b:2
};
var obj2 = {...obj1};
console.log(obj2); //{ a:1, b:2}

console.log(obj1 === obj2);// false

提示: 在这里你会发现,这是一个深拷贝,其实不然,实际上, 展开语法和 Object.assign() 行为一致, 执行的都是浅拷贝(只遍历一层)。

3、构造字面量数组。

没有展开语法的时候,只能组合使用 push, splice, concat 等方法,来将已有数组元素变成新数组的一部分。

var arr1 = [1,2,3];
var arr2 = [4,5,...arr1];
console.log(arr2);
// [4,5,1,2,3]

代替Array.concat 函数

var arr1 = [1,2,3];
var arr2 = [4,5,6];
var demo = [...arr1,...arr2];
console.log(demo);
//  [1, 2, 3, 4, 5, 6]

代替Array.unshift 方法

var arr1 = [1,2,3];
var arr2 = [4,5,6];
arr1 = [...arr2,...arr1];
console.log(arr1);
//  [4, 5, 6, 1, 2, 3]

4、字符串转数组。

var demo = "hello"
var str = [...demo];
console.log(str);
// ["h", "e", "l", "l", "o"]

剩余语法(剩余参数,rest运算符

剩余语法(Rest syntax) 看起来和展开语法完全相同,不同点在于, 剩余参数用于解构数组和对象。从某种意义上说,剩余语法与展开语法是相反的:展开语法将数组展开为其中的各个元素,而剩余语法则是将多个元素收集起来并“凝聚”为单个元素。

1、主要用于不定参数,所以es6开始不再使用arguments对象。

var demo = function (...arg){
   for (let item of arg){
       console.log(item);
   }
}
demo(1,2,3);
// 1
// 2
// 3
var demo = function (a,...arg){
  console.log(a);
  console.log(arg);
}
demo(1,2,3,4);
// 1
// [2, 3, 4]

2、配合解构一起使用。

var [a,...rest] = [1,2,3,4];
console.log(a);
console.log(rest);
// 1
// [2,3,4]
var obj = {
  a:1,
  b:2,
  c:3
}
var {a,...demo} = obj;
console.log(a);
console.log(demo);
// 1
// {b:2,c:3}
function f(...[a, b, c]) {
  console.log(a);
  return a + b + c;
}

console.log(f(1))          //1, NaN
console.log(f(1, 2, 3))   // 1, 6
console.log(f(1, 2, 3, 4)) //1, 6 

小结:

等号表达式是典型的赋值形式,函数传参和for循环的变量都是特殊形式的赋值。解构的原理是赋值的两边具有相同的结构,就可以正确取出数组或对象里面的元素或属性值,省略了使用下标逐个赋值的麻烦。对于三个点号,三点放在形参或者等号左边为rest运算符; 放在实参或者等号右边为spread运算符,或者说,放在被赋值一方为rest运算符,放在赋值一方为扩展运算符。

原文地址:https://www.cnblogs.com/sysg/p/12426355.html

时间: 2024-11-10 04:51:22

Js es6中扩展运算符(...)的相关文章

ES6数组扩展运算符和字符串遍历的新方法!!!

该方法主要是让我们在学习和工作中能够更加方便的去操作数据,数组和字符串! 下面开始代码展示阶段: 1.扩展运算符 console.log(...[1,2,3]) //以上结果输出:1,2,3 console.log(1,...[2,3,4],5) //以上结果输出:1,2,3,4,5 可以看出我在数组的前面使用了三个点,这个方法就是ES6的扩展运算符,它能够把数组给解析出来,让数组变成数值 更方便的拿到数据! console.log([...[],1]) //以上输出:[1] 但是扩展运算符后面

ES6的扩展运算符和rest参数

1.扩展运算符(spread)是三个点(...).它好比rest参数的逆运算,将一个数组转为用逗号分隔的参数序列. 比如 var list=['大家好']: list.length=1.list[0]=大家好: var list2=[...'大家好']: list2.length = 3:list2[0]=大:list2[1]=家:list2[2]=好: 扩展运算符最有用之一是:Math.max(...arr);比较数组中的最大值. 2.rest参数 rest参数(形式为"...变量名"

JS ES6中Arguments和Parameters的区别

1.简谈Arguments和Parameters 通常情况下Arguments和Parameters是可以互相使用的,但是在大多数的标准中这两个还是有那么一丢丢的却别的,Parameters(形式参数)指声明函数名和函数体的时候使用的参数,而Arguments(实际参数)指在函数实际调用的时候传入的确定值 1 function demo(a,b){ 2 console.log(a,b); 3 } 4 demo(1,2); 咱们就上面的函数来说,a.b是函数的形式参数,而在函数的调用中1.2是函数

ES6扩展运算符的用途

ES6的扩展运算符可以说是非常使用的,在给多参数函数传参,替代Apply,合并数组,和解构配合进行赋值方面提供了很好的便利性. 扩展运算符就是三个点“...”,就是将实现了Iterator 接口的对象中的每个元素都一个个的迭代并取出来变成单独的被使用. 看这个例子: console.log(...[3, 4, 5]) 结果: 3 4 5 调用其实就是: console.log(3, 4, 5) 合并数组 可以使用扩展运算符将多个数组进行合并. let arr1 = [1, 2, 3] let a

ES6 - 数组扩展(扩展运算符)

扩展运算符 扩展运算符(spread)是三个点(...).它好比 rest 参数的逆运算(函数),将一个数组转为用逗号分隔的参数序列. rest: 变量将多余的参数放入数组中. spread(扩展):rest 参数的逆运算,将一个数组转为用逗号分隔的参数序列. 总结:二者为逆操作. console.log(...[1, 2, 3]) // 1 2 3 该运算符主要用于函数调用. /** * 1.该运算符将一个数组,变为参数序列. */ function add(x, ...y) { // x =

数组的扩展运算符

一.基本使用 ES6中函数可以使用 rest参数 接收函数的多余参数,组成一个数组,放在形参的最后面. let fn = (a, ...value) => { console.log(a); console.log(value[0], value[1]); }; add(10, 20, 30); // 10 // 20 30 数组中的扩展运算符就好比 rest参数 的逆运算,将一个数组转为用逗号分隔的参数序列(也就是展开数组),在语法上,用三个点表示(...). var fruits = ['a

ES6中的扩展运算符

扩展运算符(...)将一个数组转化为参数序列,通常与函数一起使用,show(...['judy','girl']). 数组合并:[...arr1,...arr2,...arr3] 字符串转字符数组:[..."hello"]--------------["h","e","l","l","o"] 将实现Iterator接口的对象转化为真正的数组:[...nodelist],这里的nodeli

妙用ES6解构和扩展运算符让你的代码更优雅

Javascript ES6/ES2015尘埃落定,其中许多特性其实是为了简化代码.解构运算符,扩展运算符,和rest运算符就是其中很好的特性,它们可以通过减少赋值语句的使用,或者减少通过下标访问数组或对象的方式,使代码更加简洁优雅,可读性更佳.现在各浏览器及node.js都加快了部署ES6的步伐.ES6的学习正当其时. 解构 解构的作用是可以快速取得数组或对象当中的元素或属性,而无需使用arr[x]或者obj[key]等传统方式进行赋值 数组解构赋值: var arr = ['this is

ES6中对对象的扩展

ES6允许直接写入变量和函数作为对象的属性和方法.这样的书写更加简洁. ES6允许在对象中只写属性名,不写属性值.这时,属性值等于属性名所代表的变量. function f(x , y){ return {x ,y}; } f(1,2)// Object {x:1,y:2} function getPoint(){ var x=1; var y=10; return {x,y}; } getPoint()//{x:1,y:10} js语言定义对象的属性有两种方法.obj.foo=true;obj