博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ES6、7、8常用新特性总结(超实用)
阅读量:5879 次
发布时间:2019-06-19

本文共 4249 字,大约阅读时间需要 14 分钟。

ES6常用新特性

1. let && const

let 命令也用于变量声明,但是作用域为局部{    let a = 10;    var b = 1;        }在函数外部可以获取到b,获取不到a,因此例如for循环计数器就适合使用let。const用于声明一个常量,设定后值不会再改变const PI = 3.1415;PI // 3.1415PI = 3; //TypeError: Assignment to constant variable.

2. 解构赋值

ES6 允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构(Destructuring)。 例如数组:let [a, b, c] = [1, 2, 3];//等同于let a = 1;let b = 2;let c = 3;这真的让代码看起来更优美,有种python赋值的既视感。 对象的解构赋值:获取对象的多个属性并且使用一条语句将它们赋给多个变量。var {  StyleSheet,  Text,  View} = React;等同于var StyleSheet = React.StyleSheet;var Text = React.Text;var View = React.View;

3. 箭头函数

ES6中新增箭头操作符用于简化函数的写法,操作符左边为参数,右边为具体操作和返回值。var sum = (num1, num2) => { return num1 + num2; }//等同于var sum = function(num1, num2) {    return num1 + num2;};箭头函数还修复了this的指向,使其永远指向词法作用域:var obj = {    birth: 1990,    getAge: function () {        var b = this.birth; // 1990        var fn = () => new Date().getFullYear() - this.birth; // this指向obj对象        return fn();    }};obj.getAge(); // 25

4. ...操作符

这个的引入几乎不会用到extend这个函数来。通过它可以将数组作为参数直接传入函数:var people = ['Lily', 'Lemon', 'Terry'];function sayHello(people1,people2,people3){    console.log(`Hello ${people1},${people2},${people3}`);}sayHello(...people);//输出:Hello Lily,Lemon,Terry

5. iterable类型

为了统一集合类型,ES6标准引入了新的iterable类型,Array、Map和Set都属于iterable类型,具有iterable类型的集合可以通过新的for … of循环来遍历。var a = ['A', 'B', 'C'];var s = new Set(['A', 'B', 'C']);var m = new Map([[1, 'x'], [2, 'y'], [3, 'z']]);for (var x of a) { // 遍历Array    alert(x);}for (var x of s) { // 遍历Set    alert(x);}for (var x of m) { // 遍历Map    alert(x[0] + '=' + x[1]);}Map相关操作如下, Set同理:var m = new Map(); // 空Mapm.set('Adam', 67); // 添加新的key-valuem.set('Bob', 59);m.has('Adam'); // 是否存在key 'Adam': truem.get('Adam'); // 67m.delete('Adam'); // 删除key 'Adam'm.get('Adam'); // undefined

6.类

ES6提供了更接近传统语言的写法,引入了Class(类)这个概念,作为对象的模板。通过class关键字,可以定义类,与多数传统语言类似。//定义类class Point {  constructor(x, y) {    this.x = x;    this.y = y;  }  toString() {    return '(' + this.x + ', ' + this.y + ')';  }}

7.Set

var arr = [1,2,3,3,3,3,14]var set = new Set(arr)var arr = Array.from(set)console.log(arr) // 1,2,3,14

ES7常用新特性

1. Array.prototype.includes

在一个数组或者列表中检查是否存在一个值let arr = ['react', 'angular', 'vue']// Correctif (arr.includes('react')) {  console.log('Can use React')}还能在字符串中使用includes:let str = 'React Quickly'// Correctif (str.toLowerCase().includes('react')) {  // true  console.log('Found "react"')  }除了增强了可读性语义化,实际上给开发者返回布尔值,而不是匹配的位置。includes也可以在NaN(非数字)使用。最后 ,includes第二可选参数fromIndex,这对于优化是有好处的,因为它允许从特定位置开始寻找匹配。更多例子:console.log([1, 2, 3].includes(2)) // === true)console.log([1, 2, 3].includes(4)) // === false)console.log([1, 2, NaN].includes(NaN)) // === true)console.log([1, 2, -0].includes(+0)) // === true)console.log([1, 2, +0].includes(-0)) // === true)console.log(['a', 'b', 'c'].includes('a')) // === true)console.log(['a', 'b', 'c'].includes('a', 1)) // === false)

2.Exponentiation Operator(求幂运算)

et a = 7 ** 12let b = 2 ** 7console.log(a === Math.pow(7,12)) // trueconsole.log(b === Math.pow(2,7)) // true开发者还可以操作结果:let a = 7a **= 12let b = 2b **= 7console.log(a === Math.pow(7,12)) // trueconsole.log(b === Math.pow(2,7)) // true

ES8新特性

1. Object.values/Object.entries

ES5 引入了Object.keys方法,返回一个数组,成员是参数对象自身的(不含继承的)所有可遍历( enumerable )属性的键名。Object.values方法返回一个数组,成员是参数对象自身的(不含继承的)所有可遍历( enumerable )属性的键值。Object.entries方法返回一个数组,成员是参数对象自身的(不含继承的)所有可遍历( enumerable )属性的键值对数组。let {keys, values, entries} = Object;  let obj = { a: 1, b: 2, c: 3 };  for (let key of keys(obj)) {      console.log(key); // 'a', 'b', 'c'}  for (let value of values(obj)) {      console.log(value); // 1, 2, 3}  for (let [key, value] of entries(obj)) {      console.log([key, value]); // ['a', 1], ['b', 2], ['c', 3]}

2. String padding(字符串填充)

3. Async/Await

使用Promise使用Promise写异步代码,会比较麻烦:axios.get(`/q?query=${query}`).then(response => response.data).then(data =>{this.props.processfetchedData(data);}).catch(error => console.log(error));使用Async/AwaitAsync/Await使得异步代码看起来像同步代码,这正是它的魔力所在:async fetchData(query) =>{try{const response = await axios.get(`/q?query=${query}`);const data = response.data;return data;}catch (error){console.log(error)}} fetchData(query).then(data =>{this.props.processfetchedData(data)})Async/Await是写异步代码的新方式,以前的方法有回调函数和Promise。相比于Promise,它更加简洁,并且处理错误、条件语句、中间值都更加方便

转载地址:http://udcix.baihongyu.com/

你可能感兴趣的文章
安装gulp及相关插件
查看>>
如何在Linux用chmod来修改所有子目录中的文件属性?
查看>>
Applet
查看>>
高并发环境下,Redisson实现redis分布式锁
查看>>
关于浏览器的cookie
查看>>
Hyper-V 2016 系列教程30 机房温度远程监控方案
查看>>
.Net 通过MySQLDriverCS操作MySQL
查看>>
JS Cookie
查看>>
ubuntu Unable to locate package sysv-rc-conf
查看>>
笔记:认识.NET平台
查看>>
cocos2d中CCAnimation的使用(cocos2d 1.0以上版本)
查看>>
【吉光片羽】短信验证
查看>>
MacBook如何用Parallels Desktop安装windows7/8
查看>>
gitlab 完整部署实例
查看>>
GNS关于IPS&ASA&PIX&Junos的配置
查看>>
七天学会ASP.NET MVC (四)——用户授权认证问题
查看>>
upgrade to iOS7,how to remove stroyboard?
查看>>
影响企业信息化成败的几点因素
查看>>
SCCM 2016 配置管理系列(Part8)
查看>>
zabbix监控部署
查看>>