专栏名称: JavaScript
面向JavaScript爱好人员提供:前端最新资讯、原创内容、JavaScript、HTML5、Ajax、jQuery、Node.js等一系列教程和经验分享。
目录
相关文章推荐
51好读  ›  专栏  ›  JavaScript

ES6、ES7、ES8、ES9、ES10新特性一览

JavaScript  · 公众号  · Javascript  · 2019-04-11 08:26

正文

请到「今天看啥」查看全文


获取数组中的值

从数组中获取值并赋值到变量中,变量的顺序与数组中对象顺序对应。

  1. var foo = ["one", "two", "three", "four"];


  2. var [one, two, three] = foo;

  3. console.log(one);

  4. console.log(two);

  5. console.log(three);


  6. //如果你要忽略某些值,你可以按照下面的写法获取你想要的值

  7. var [first, , , last] = foo;

  8. console.log(first);

  9. console.log(last);


  10. //你也可以这样写

  11. var a, b;


  12. [a, b] = [1, 2];

  13. console.log(a);

  14. console.log(b);

如果没有从数组中的获取到值,你可以为变量设置一个默认值。

  1. var a, b;


  2. [a=5, b=7] = [1];

  3. console.log(a);

  4. console.log(b);

通过解构赋值可以方便的交换两个变量的值。

  1. var a = 1;

  2. var b = 3;


  3. [a, b] = [b, a];

  4. console.log(a);

  5. console.log(b);

获取对象中的值

  1. const student = {

  2. name:'Ming',

  3. age:'18',

  4. city:'Shanghai'

  5. };


  6. const {name,age,city} = student;

  7. console.log(name);

  8. console.log(age);

  9. console.log(city);

7.延展操作符(Spread operator)

延展操作符... 可以在函数调用/数组构造时, 将数组表达式或者string在语法层面展开;还可以在构造对象时, 将对象表达式按key-value的方式展开。

语法

函数调用:

  1. myFunction(...iterableObj);

数组构造或字符串:

  1. [...iterableObj, '4', ...'hello', 6];

构造对象时,进行克隆或者属性拷贝(ECMAScript 2018规范新增特性):

  1. let objClone = { ...obj };

应用场景

在函数调用时使用延展操作符

  1. function sum(x, y, z) {

  2. return x + y + z;

  3. }

  4. const numbers = [1, 2, 3];



  5. console.log(sum.apply(null, numbers));



  6. console.log(sum(...numbers));

构造数组

没有展开语法的时候,只能组合使用 push,splice,concat 等方法,来将已有数组元素变成新数组的一部分。有了展开语法, 构造新数组会变得更简单、更优雅:

  1. const stuendts = ['Jine','Tom'];

  2. const persons = ['Tony',... stuendts,'Aaron','Anna'];

  3. conslog.log(persions)

和参数列表的展开类似, ... 在构造字数组时, 可以在任意位置多次使用。

数组拷贝

  1. var arr = [1, 2, 3];

  2. var arr2 = [...arr];

  3. arr2.push(4);

  4. console.log(arr2)

展开语法和 Object.assign() 行为一致, 执行的都是浅拷贝(只遍历一层)。

连接多个数组

  1. var arr1 = [0, 1, 2];

  2. var arr2 = [3, 4, 5];

  3. var arr3 = [...arr1, ...arr2];

  4. //等同于

  5. var arr4 = arr1.concat(arr2);

在ECMAScript 2018中延展操作符增加了对对象的支持

  1. var obj1 = { foo: 'bar', x: 42 };

  2. var obj2 = { foo: 'baz', y: 13 };


  3. var clonedObj = { ...obj1 };



  4. var mergedObj = { ...obj1, ...obj2 };

javascript

在React中的应用

通常我们在封装一个组件时,会对外公开一些 props 用于实现功能。大部分情况下在外部使用都应显示的传递 props 。但是当传递大量的props时,会非常繁琐,这时我们可以使用 ...(延展操作符,用于取出参数对象的所有可遍历属性) 来进行传递。

一般情况下我们应该这样写

  1. name ='Jine' age ={21} />

使用 ... ,等同于上面的写法

  1. const params = {

  2. name: 'Jine',

  3. age: 21

  4. }

  5. <CustomComponent {...params} />

配合解构赋值避免传入一些不需要的参数

  1. var params = {

  2. name: '123',

  3. title: '456',

  4. type: 'aaa'

  5. }


  6. var { type, ...other } = params;


  7. <CustomComponent type='normal' number={2} {...other} />

  8. //等同于

  9. <CustomComponent type='normal' number={2} name='123' title='456' />

8.对象属性简写

在ES6中允许我们在设置一个对象的属性的时候不指定属性名。

不使用ES6

  1. const name='Ming',age='18',city='Shanghai';


  2. const student = {

  3. name:name,

  4. age:age,

  5. city:city

  6. };

  7. console.log(student);

对象中必须包含属性和值,显得非常冗余。

使用ES6

  1. const name='Ming',age='18',city='Shanghai';


  2. const student = {

  3. name,

  4. age,

  5. city

  6. };

  7. console.log(student);

对象中直接写变量,非常简洁。

Promise 是异步编程的一种解决方案,比传统的解决方案callback更加的优雅。它最早由社区提出和实现的,ES6 将其写进了语言标准,统一了用法,原生提供了Promise对象。

不使用ES6

嵌套两个setTimeout回调函数:

  1. setTimeout(function()

  2. {

  3. console.log('Hello');

  4. setTimeout(function()

  5. {

  6. console.log('Hi');

  7. }, 1000);

  8. }, 1000);

使用ES6

  1. var waitSecond = new Promise(function(resolve, reject)







请到「今天看啥」查看全文