ES6、ES7、ES8、ES9、ES10、ES11新特性2

简介: ES6、ES7、ES8、ES9、ES10、ES11新特性

ES7新特性(2016)

ES2016添加了两个小的特性来说明标准化过程:

  • 数组includes()方法,用来判断一个数组是否包含一个指定的值,根据情况,如果包含则返回true,否则返回false。
  • a ** b指数运算符,它与 Math.pow(a, b)相同。

1.Array.prototype.includes()

includes()函数用来判断一个数组是否包含一个指定的值,如果包含则返回true,否则返回false

includes 函数与 indexOf 函数很相似,下面两个表达式是等价的:


arr.includes(x)
arr.indexOf(x) >= 0

2.指数操作符

在ES7中引入了指数运算符****具有与Math.pow(..)等效的计算结果。

// 不使用指数操作符
function calculateExponent(base, exponent)
{
    if (exponent === 1)
    {
        return base;
    }
    else
    {
        return base * calculateExponent(base, exponent - 1);
    }
}
console.log(calculateExponent(2, 10)); // 输出1024
console.log(Math.pow(2, 10)); // 输出1024
//使用指数操作符
console.log(2**10);// 输出1024

ES8新特性(2017)

  • async/await
  • Object.values()
  • Object.entries()
  • Object.getOwnPropertyDescriptors()

1.async/await

ES2018引入异步迭代器(asynchronous iterators),这就像常规迭代器,除了next()方法返回一个Promise。因此await可以和for...of循环一起使用,以串行的方式运行异步操作。例如:

async function process(array) {
  for await (let i of array) {
    doSomething(i);
  }
}

2.Object.values()

Object.values()是一个Object.keys()类似的新函数,但返回的是Object自身属性的所有值,不包括继承的值。假设我们要遍历如下对象obj的所有值:

const obj = {a: 1, b: 2, c: 3};
Object.keys(obj)
(3) ["a", "b", "c"]
Object.values(obj)
(3) [1, 2, 3]

3.Object.entries()

Object.entries()函数返回一个给定对象自身可枚举属性的键值对的数组。

接下来我们来遍历上文中的obj对象的所有属性的key和value:

// ES7
Object.keys(obj).forEach(key=>{
 console.log('key:'+key+' value:'+obj[key]);
})
//key:a value:1
//key:b value:2
//key:c value:3
// ES8
for(let [key,value] of Object.entries(obj1)){
 console.log(`key: ${key} value:${value}`)
}
//key:a value:1
//key:b value:2
//key:c value:3
Object.entries(obj)
(3) [Array(2), Array(2), Array(2)]
0: (2) ["a", 1]
1: (2) ["b", 2]
2: (2) ["c", 3]
length: 3
__proto__: Array(0)

4.Object.getOwnPropertyDescriptors()

Object.getOwnPropertyDescriptors()函数用来获取一个对象的所有自身属性的描述符,如果没有任何自身属性,则返回空对象。

Object.getOwnPropertyDescriptors(obj)

返回obj对象的所有自身属性的描述符,如果没有任何自身属性,则返回空对象。

const obj2 = {
 name: 'Jine',
 get age() { return '18' }
};
Object.getOwnPropertyDescriptors(obj2)
// {
//   age: {
//     configurable: true,
//     enumerable: true,
//     get: function age(){}, //the getter function
//     set: undefined
//   },
//   name: {
//     configurable: true,
//     enumerable: true,
//  value:"Jine",
//  writable:true
//   }
// }





相关文章
|
前端开发 JavaScript
ES6(三)
es6补充知识
75 1
|
JSON 前端开发 JavaScript
ES6、ES7、ES8、ES9、ES10、ES11新特性3
ES6、ES7、ES8、ES9、ES10、ES11新特性
|
1月前
|
存储 JavaScript 前端开发
什么是Es6,有什么特点
什么是Es6,有什么特点
40 1
|
前端开发 JavaScript Java
ES6、ES7、ES8、ES9、ES10、ES11新特性1
ES6、ES7、ES8、ES9、ES10、ES11新特性
|
7月前
|
前端开发 JavaScript Java
ES7、ES8、ES9、ES10、ES11、ES12都增加了那些新特性?(二)
ES7、ES8、ES9、ES10、ES11、ES12都增加了那些新特性?(二)
108 0
|
7月前
|
JSON 前端开发 数据格式
ES7、ES8、ES9、ES10、ES11、ES12都增加了那些新特性?(一)
ES7、ES8、ES9、ES10、ES11、ES12都增加了那些新特性?(一)
130 0
|
前端开发 JavaScript API
|
网络架构 索引
ES6(一)
- 使用let,声明的变量仅在块级作用域内有效 - var命令声明的,在全局范围内都有效 - const声明一个只读的常量。一旦声明,常量的值就不能改变。 - const的作用域与let命令相同:只在声明所在的块级作用域内有效。 - let命令改变了语法行为,它所声明的变量一定要在声明后使用,否则报错。 - let不允许在相同作用域内,重复声明同一个变量。 - 什么时候用 let,什么使用用 const——如果不知道用什么的时候,就用 const
58 0
|
JSON 资源调度 JavaScript
ES6 Day01
ES6 Day01
81 0
|
前端开发 Java 网络架构
ES6(总结)
ES6(总结)
76 0