JavaScript展开操作符(Spread operator)介绍

本文介绍JavaScript的展开操作符(Spread operator)...。本文适合ES6初学者。

你可以通过展开操作符(Spread operator)...扩展一个数组对象和字符串。展开运算符(spread)是三个点(…),可以将可迭代对象转为用逗号分隔的参数序列。如同rest参数的逆运算。

用于数组

以数组为例,首先创建一个数组,

const a = [1, 2, 3],
          b = [4,5,6];

你可以轻松赋值一个数组:

const c = [...a]  // [1,2,3]

你还可以轻松拼接两个数组:

const d = [...a,...b] //  [1,2,3,4,5,6]

也可以如下拼接

const d = [...a,4, 5, 6] //  [1,2,3,4,5,6]

如果要把一个数组b的元素全部插入到数组a的后面(不生成新数组),可以这样操作:

const a = [1,2,3];
a.push(...b);

如果要把一个数组b的元素全部插入到数组a的前面(不生成新数组),可以这样操作:

const a = [1,2,3];
a. unshift(...b);

类数组对象变成数组

可以通过展开运算符把类数组对象变成真正的数组:

var list=document.getElementsByTagName(‘a‘);
var arr=[..list];

用于对象

展开操作符同样可以用于对象。可以通过以下方式clone一个对象:

const newObj = { ...oldObj }

注意: 如果属性值是一个对象,那么只会生成一个指向该对象的引用,而不会深度拷贝。也就是说,展开运算符不会递归地深度拷贝所有属性。并且,只有可枚举属性会被拷贝,原型链不会被拷贝。

还可以用于merge两个对象。

const obj1 = { a: 111, b: 222 };
const obj2 = { c: 333, d: 444 };
const merged = { ...obj1, ...obj2 };
console.log(merged); // -> { a: 111, b: 222, c: 333, d: 444 }

当然也可以适用于以下的情况:

const others = {third: 3, fourth: 4, fifth: 5}
const items = { first:1, second:1, ...others }
items //{ first: 1, second: 2, third: 3, fourth: 4, fifth: 5 }

如果merge的多个对象有相同属性,则后面的对象的会覆盖前面对象的属性,比如

const obj1 = { a: 111, b: 222 };
const obj2 = { b: 333, d: 444 };
const merged = { ...obj1, ...obj2 };
console.log(merged); // -> { a: 111,  b: 333, d: 444 }

const obj1 = {a:111,b:222}
const merged = {a:222,...obj1};
console.log(merged); // -> { a: 111,  b: 333 }

const obj1 = {a:111,b:222}
const merged = {...obj1,a:222};
console.log(merged); // -> { a: 222,  b: 333 }

用于字符串

通过展开操作符,可以把一个字符串分解成一个字符数组,相当于

const hey = ‘hey‘
const arrayized = [...hey] // [‘h‘, ‘e‘, ‘y‘]

以上代码相当于:

const hey = ‘hey‘
const arrayized = hey.split(‘‘) // [‘h‘, ‘e‘, ‘y‘]

用于函数传参

通过展开操作符,可以通过数组给函数传参:

const f = (foo, bar) => {}
const a = [1, 2]
f(...a)

const numbers = [1, 2, 3, 4, 5]
const sum = (a, b, c, d, e) => a + b + c + d + e
const sum = sum(...numbers)

用于具有 Iterator 接口的对象

具有 Iterator 接口的对象Map 和 Set 结构,Generator 函数,可以使用展开操作符,比如:

var s = new Set();
s.add(1);
s.add(2);
var arr = [...s]// [1,2]

function  * gen() {
    yield 1;
    yield 2;
    yield 3;
}

var arr = [...gen()]  // 1,2,3

如果是map,会把每个key 和 value 转成一个数组:

var m = new Map();
m.set(1,1)
m.set(2,2)
var arr = [...m] // [[1,1],[2,2]]

注意以下代码会报错,因为obj不是一个Iterator对象:

var obj = {‘key1‘: ‘value1‘};
var array = [...obj]; // TypeError: obj is not iterable

欢迎关注公众号“ITman彪叔”。彪叔,拥有10多年开发经验,现任公司系统架构师、技术总监、技术培训师、职业规划师。熟悉Java、JavaScript。在计算机图形学、WebGL、前端可视化方面有深入研究。对程序员思维能力训练和培训、程序员职业规划和程序员理财投资有浓厚兴趣。

原文地址:https://blog.51cto.com/13842424/2411533

时间: 2024-10-08 00:34:15

JavaScript展开操作符(Spread operator)介绍的相关文章

C++的重载操作符(operator)介绍(转)

本文主要介绍C++中的重载操作符(operator)的相关知识. 1. 概述 1.1 what operator 是C++的一个关键字,它和运算符(如=)一起使用,表示一个运算符重载函数,在理解时可将operator和运算符(如operator=)视为一个函数名. 使用operator重载运算符,是C++扩展运算符功能的方法.使用operator扩展运算符功能的原因如下: 使重载后的运算符的使用方法与重载前一致扩展运算符的功能只能通过函数的方式实现(实际上,C++中各种"功能"都是由函

《理解 ES6》阅读整理:函数(Functions)(三)Function Constructor & Spread Operator

增强的Function构造函数(Increased Capabilities of the Function Constructor) 在Javascript中Function构造函数可以让你创建一个新函数,不过这个功能并不经常使用.Function构造函数接收函数参数和函数体作为参数,参数都必须是字符串.下面是一个例子: var add = new Function("first", "second", "return first+second"

javascript的return语句简单介绍

javascript的return语句简单介绍:return语句在js中非常的重要,不仅仅具有返回函数值的功能,还具有一些特殊的用法,有个清晰的把握是非常有必要的.下面就结合实例简单介绍一下return语句的作用.一.用来返回控制和函数结果:通常情况,return语句对于一个函数是很有必要的,因为往往需要函数在一系列的代码执行后会得到一个期望的返回值,而此值就是通过return语句返回,并且将控制权返回给主调函数.语法格式: return 表达式 代码实例如下: function add(){

转换操作符(conversion operator)

转换操作符(conversion operator) 是一种特殊的类成员函数.它定义将类类型值转变为其它类型值的转换. 1 classSmallInt 2 { 3 public: 4 SmallInt(int i =0): val(i) 5 { 6 if( i <0|| i >255) 7 throw std::out_of_range("Bad SmallInt initializer"); 8 } 9 operatorint()const {return val;} 1

javascript继承的实现方式介绍

javascript继承的实现方式介绍:作为面向对象的一门语言,继承自然是javascript所比不可少的特性,下面就简单介绍一下javascript实现继承的几种方式,希望能够对需要的朋友带来一定的帮助,下面进入正题.一.对象冒充: function A() { this.name="蚂蚁部落"; this.address="青岛市南区"; } function B() { this.target="提供免费的教程"; this.newA=A;

HTML5统计图表amCharts JavaScript 统计图控件详细介绍

amCharts控件提供您最需要的JavaScript/HTML5图表.一套包括串行(列,栏,线,区,步线,平滑线,烛台,OHLC图),馅饼 /甜甜圈,雷达/极性和XY /分散/气泡图.amCharts的图表提供了无与伦比的功能和性能,在一个高级的,符合标准的包里. 支持所有高级浏览器 amCharts的JavaScript图表支持所有高级浏览器(包括但不限于)现代火狐,Chrome,Safari,Opera和Internet Explorer的版本.它的iPad,iPhone,iPod Tou

[ES6] 13. Using the ES6 spread operator ...

The spread operator (...) allows you to "explode" an array into its individual elements. Spreate an array: console.log([1,2,3]); // [1, 2, 3] console.log(...[1,2,3]); // 1 2 3 Spread out the second array and push that in first array: let first =

JavaScript 逗号操作符

让我们从一个有趣的微博开始吧. 末尾的c是优先级最低的逗号操作符.逗号操作符是操作符优先级的最后一行,并且很少有文章记录,它隐藏着它的锋芒.它可能不是JavaScript强势操作符,但是我喜欢它.它简单.优雅并且你应该让它成为你的朋友.所以,我们开始吧--你需要更多了解JavaScript这个害羞英雄. 它是做什么的? 逗号操作符评估它的操作数(从左到右)并返回第二个操作数的值.(MDC) var a = (7, 5); a; //5 var x, y, z; x = (y=1, z=4); x

javascript的arguments对象简单介绍

javascript的arguments对象简单介绍:这里以最简单的方式介绍一下arguments对象的用法,先看一段代码: var a=1; var b=2; function mytest(a,b){ var c=a+b; document.write(arguments[0]); } mytest(1,2); 以上代码可以输出传递给函数的第一个参数,也就是说通过类似于数组的索引值可以访问传递给函数的参数,而无需使用参数的名称.这里就介绍这么多了,希望能够给初学者一个最初的理解. 原文地址是