ES6、7、8、9、10常用新特性总结(更新中)

1、变量声明let && const,增加新的词法作用域(ES6)

2、解构赋值(ES6)

数组解构赋值:let [a, b, c] = [1, 2, 3];//等同于let a = 1;let b = 2;let c = 3; 让代码看起来更优美,有种python赋值的既视感。

对象的解构赋值:var {  StyleSheet,  Text } = React; 等同于var StyleSheet =React.StyleSheet;  var Text = React.Text;

3、箭头函数(ES6)

ES6中新增箭头操作符除了用于简化函数的写法,还修复了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、...操作符(ES6)

通过它可以将数组作为参数直接传入函数

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)

为了统一集合类型,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) {
  alert(x);  // 遍历Array
}
for (var x of s) {
  alert('Set' + x);  // 遍历Set
}
for (var x of m) {
  alert('map' + x[0] + '=' + x[1]);  // 遍历Map
}
var m = new Map();   // Map相关操作如下, Set同理
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

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

6、类(ES6)

ES6提供了更接近传统语言的写法,引入了Class(类)这个概念,作为对象的模板。通过class关键字,可以定义类,与多数传统语言类似。

//定义类
class Point {  
  constructor(x, y) {    
    this.x = x;    
    this.y = y;  
  }
  toString() {    
    return '(' + this.x + ', ' + this.y + ')';  
  } 
}

7、Object.values/Object.entries (ES6)

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]
}

8、Array.prototype.includes(ES7)

在一个数组或者列表中检查是否存在一个值

let arr = ['react', 'angular', 'vue']
if (arr.includes('react')) {  
  console.log('Can use React') 
}

还能在字符串中使用includes,除了增强了可读性语义化,实际上给开发者返回布尔值,而不是匹配的位置。

let str = 'React Quickly'
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

9、Exponentiation Operator(求幂运算)(ES7)

let 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

10、String padding(字符串填充) (ES7)

padStart() 方法用另一个字符串填充当前字符串(重复,如果需要的话),以便产生的字符串达到给定的长度。填充从当前字符串的开始(左侧)应用的。

padEnd() ~~填充从当前字符串的开始(左侧)应用的。

'abc'.padStart(10);         // "       abc"
'abc'.padStart(10, "foo");  // "foofoofabc"
'abc'.padStart(6,"123465"); // "123abc"
'abc'.padEnd(10);          // "abc       "
'abc'.padEnd(10, "foo");   // "abcfoofoof"

11、Async/Await (ES7)

因为 async 函数返回一个 Promise 对象,所以 await 可以用于等待一个 async 函数的返回值。注意到 await 不仅仅用于等 Promise 对象,它可以等任意表达式的结果,所以,await 后面实际是可以接普通函数调用或者直接量的。等到一个 Promise 对象,它会阻塞后面的代码,等着 Promise 对象 resolve,然后得到 resolve 的值,作为 await 表达式的运算结果。

function getSomething() {
    return "something";
}

async function testAsync() {
    return Promise.resolve("hello async");
}

async function test() {
    const v1 = await getSomething();
    const v2 = await testAsync();
    console.log(v1, v2);
}

test();

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值