php to es7,ES6、ES7和ES8常用的特性总结(代码示例)

本篇文章给大家带来的内容是关于ES6、ES7和ES8常用的特性总结(代码示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

ES6常用新特性

1. let && constlet 命令也用于变量声明,但是作用域为局部

{

let a = 10;

var b = 1;

}

在函数外部可以获取到b,获取不到a,因此例如for循环计数器就适合使用let。

const用于声明一个常量,设定后值不会再改变

const PI = 3.1415;

PI // 3.1415

PI = 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.Text;

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(); // 空Map

m.set('Adam', 67); // 添加新的key-value

m.set('Bob', 59);

m.has('Adam'); // 是否存在key 'Adam': true

m.get('Adam'); // 67

m.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 + ')';

}

}

ES7常用新特性

1. Array.prototype.includes在一个数组或者列表中检查是否存在一个值

let arr = ['react', 'angular', 'vue']

// Correct

if (arr.includes('react')) {

console.log('Can use React')

}

还能在字符串中使用includes:

let str = 'React Quickly'

// Correct

if (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 ** 12

let b = 2 ** 7

console.log(a === Math.pow(7,12)) // true

console.log(b === Math.pow(2,7)) // true

开发者还可以操作结果:

let a = 7

a **= 12

let b = 2

b **= 7

console.log(a === Math.pow(7,12)) // true

console.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/Await

Async/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,它更加简洁,并且处理错误、条件语句、中间值都更加方便

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值