學習七、ES2016與ES2017的新特性
一、ECMAScript2016版本概述
1、Array.includes();
可以查詢陣列中是否含有某個引數,包括NaN,之前的indexOf可以返回陣列中某個引數的下標,但是無法確認是否含有NaN。
const arr = ['foo', 1, NaN, false]
// 找到返回元素下標
console.log(arr.indexOf('foo'))
// 找不到返回 -1
console.log(arr.indexOf('bar'))
// 無法找到陣列中的 NaN
console.log(arr.indexOf(NaN))
// 直接返回是否存在指定元素
console.log(arr.includes('foo'))
// 能夠查詢 NaN
console.log(arr.includes(NaN))
2、指數運算子:**
Math.pow(2,10) 等同於 2 ** 10
console.log(Math.pow(2, 10))
console.log(2 ** 10)
二、ECMAScript2017版本概述
1、Object.values(obj)返回一個obj所有值的一個陣列,從前的Object.keys(obj)返回所有鍵的一個陣列。
const obj = {
foo: 'value1',
bar: 'value2'
}
console.log(Object.values(obj))
2、Object.entries(obj)可以返回一個能夠使用for...of的物件,然後我們就可以將這個陣列轉換成一個Map物件new Map();
console.log(Object.entries(obj))
for (const [key, value] of Object.entries(obj)) {
console.log(key, value)
}
console.log(new Map(Object.entries(obj)))
3、Object.getOwnPropertyDescriptors,自從ES2015以來我們可以給物件新增get/set方法,
我們無法用assgin方法完全複製一個物件的set/get方法,但是getOwnPropertyDescriptors複製之後,
就可以用defineProperties代替assgin完全複製一個物件。
const p1 = {
firstName: 'Lei',
lastName: 'Wang',
get fullName () {
return this.firstName + ' ' + this.lastName
}
}
console.log(p1.fullName)
const p2 = Object.assign({}, p1)
p2.firstName = 'zce'
console.log(p2)
const descriptors = Object.getOwnPropertyDescriptors(p1)
// console.log(descriptors)
const p3 = Object.defineProperties({}, descriptors)
p3.firstName = 'zce'
console.log(p3.fullName)
4、padStart和padEnd,用給定的字串去填充,直到我們目標字串達到我們指定的長度。
const books = {
html: 5,
css: 16,
javascript: 128
}
for (const [name, count] of Object.entries(books)) {
console.log(name, count)
}
for (const [name, count] of Object.entries(books)) {
console.log(`${name.padEnd(16, '-')}|${count.toString().padStart(3, '0')}`)
}
5、函式引數中允許新增尾部逗號。
function foo (
bar,
baz,
) {}
6、Async/await:Promise的語法糖。
async function main () {
const users = await ajax('/api/users.json')
}
相關文章
- 通過示例來學習ES2016, 2017, 2018的新特性
- Es2016、2017新特性(上)
- Oracle11新特性——PLSQL新特性(七)OracleSQL
- JDK 1.8 新特性學習(Stream)JDK
- Java1.8新特性學習Java
- java8新特性學習Java
- 【MySQL】5.7新特性之七MySql
- JDK5.0新特性的學習--列舉JDK
- C++ 11 新特性 nullptr 學習C++Null
- JDK11新特性學習(一)JDK
- JDK11新特性學習(二)JDK
- 學習Rust泛型與特性Rust泛型
- JDK5.0新特性的學習--泛型(下)JDK泛型
- JDK5.0新特性的學習--泛型(上)JDK泛型
- Automatic Reference Counting(ARC)特性學習(iOS5新特性學習之五)iOS
- jdk-1.8新特性學習筆記JDK筆記
- JDK8新特性學習總結JDK
- JDK8 新特性學習筆記JDK筆記
- Tomcat 7 的七大新特性Tomcat
- JDK5.0新特性的學習--後設資料JDK
- JDK5.0新特性的學習--靜態匯入JDK
- 一起學習React18 新特性React
- 學習筆記~1.4 HTML5新特性筆記HTML
- 天天學習ORACLE(三)-11G新特性Oracle
- JDK5.0新特性的學習--可變長引數JDK
- 推薦一個學習php8的新特性的文件PHP
- JDK 新特性學習筆記之模組系統JDK筆記
- [Java學習筆記]JDK1.8新特性學習(一)Lambda表示式Java筆記JDK
- Java:面向未來的七大強力新特性Java
- Scala學習(七)練習
- ORACLE 10G 新特性(INCREMENTALLY UPDATED BACKUPS)學習Oracle 10gREM
- 淺談RxJava與2.0的新特性RxJava
- 學習Java的第七週Java
- 2019 年的 JavaScript 新特性學習指南 | 掘金年度徵文JavaScript
- PHP7 中我們應該學習會用的新特性PHP
- OceanBase學習之路11|體驗 DDL 新特性(Oracle 模式)Oracle模式
- OceanBase學習之路12|體驗 DDL 新特性(MySQL 模式)MySql模式
- 開發者不可不知的 Google Chrome 七大新特性GoChrome