扩展运算符的应用


  • 合并数组
//ES5
var arr1 = ['a','b'];
var arr2 = [''c];
var arr3 = ['d','e'];
//ES5的合并数组
arr1.concat(arr2, arr3);
//ES6的合并数组
[...arr1, ...arr2, ...arr3]
  • 与结构赋值结合
//ES5
a = list[0], rest = list.slice(1)
//ES6
[a, ...rest] = list;
const [first, ...rest] = [1,2,3,4,5];
first // 1
rest //[2,3,4,5]
const [first, ...rest] = [];
first //undefined
rest //[]
  • 字符串
    扩展运算符还可以将字符串转为真正的数组。
[...'hello']
//['h','e','l','l','o']
  • 实现了Iterator 接口的对象
    任何Iterator 接口的对象,都可以用扩展运算符转为真正的数组。
var nodelist = document.querySelectorAll('div');
var array = [...nodeList];

上面代码中,querySelectorAll方法返回的是一个nodeList对象。它不是数组,而是一个类似数组的对象。这时,扩展运算符可以将其转为真正的数组。原因就在于NodeList对象实现了Iterator接口。
对于那些没有部署Iterator接口的类似数组的对象,扩展运算符就无法将其转为真正的数组。

let arrayLike = {
  '0': 'a',
  '1': 'b'
};
// TypeError: Cannot spread non-iterable object
let arr = [...arrayLike];

上面代码,arrayLike是一个类似数组的对象,但是没有部署Iterator接口,扩展运算符就会报错。这时,可以改为使用Array.from方法将arrayLike转为真正的数组。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1 含义扩展运算符( spread )是三个点(...)。它好比 rest 参数的逆运算,将一个数组转为用逗号分...
    yzc123446阅读 782评论 0 1
  • 函数参数的默认值 解构赋值默认值的使用: 函数的length属性:指定了默认值以后,函数的length属性,将返回...
    KeithFu阅读 278评论 0 0
  • 1.含义 扩展运算符(spread)就是我们知道的三个点(...),它就好像rest参数的逆运算,将一个数组转为用...
    雨飞飞雨阅读 2,266评论 0 8
  • 《ECMAScript6 入门》阮一峰 读书笔记 let和constlet声明的变量仅在块级作用域内有效,var声...
    亲爱的孟良阅读 752评论 1 2
  • 如何写出更好的CSS?(CSS是从右往左进行解析) ①避免使用*(全局)选择器。(耗费性能) ②CSS选择器的层级...
    一现_阅读 395评论 0 0