ES2016(ES7)-ES2020(ES11)语法总结

一、ES2016(ES7)

1. 数组扩展:Array.prototype.includes()

语法

Array.prototype.includes(searchElement, fromIndex)

判断数组是否包含指定元素

const arr = ['es6', 'es7', 'es8', 'es9', 'es10']
console.log(arr.includes('es7')) // true
console.log(arr.includes('es5')) // false

第二个参数标识搜索起始位置

const arr = ['es6', 'es7', 'es8', 'es9', 'es10']
console.log(arr.includes('es7', 1)) // true,从下标1开始查找
console.log(arr.includes('es7', 2)) // false,从下标2开始查找

第二个参数可以是一个负数,-n代表倒数低n个元素

const arr = ['es6', 'es7', 'es8', 'es9', 'es10']
console.log(arr.includes('es7', -4)) // true
console.log(arr.includes('es7', -3)) // false

可以查询到NaN

const arr = ['es6', 'es7', 'es8', NaN, 'es10']
console.log(arr.includes(NaN)) // true

2. 数值扩展:幂运算符号

语法

**

等同于

Math.pow(x, y)
console.log(2 ** 10) // 1024

二、ES2017(ES8)

1. 异步编程解决方案Async Await

语法

async / await

输出error,使用注释部分将输出success

async function timeout () {
  return new Promise((resovle, reject) => {
    setTimeout(() => {
      // resovle('success')
      reject('error')
    }, 1000)
  })
}

async function main () {
  try {
    const res = await timeout()
    console.log(res)
  } catch (e) {
    console.log(e)
  }
}

main()

仿axios请求

async function request(url) {
  const data = await axios.get(url)
  console.log(data)
}

2. 对象扩展:Object.values(),Object.entries()

Object.values()
Object.entries()
const obj = {
  name: 'imooc',
  web: 'www.imooc.com',
  course: 'es'
}
let res = Object.values(obj)
console.log(res)
// [ 'imooc', 'www.imooc.com', 'es' ]
const obj = {
  name: 'imooc',
  web: 'www.imooc.com',
  course: 'es'
}
let res = Object.entries(obj)
console.log(res)
// [ [ 'name', 'imooc' ], [ 'web', 'www.imooc.com' ], [ 'course', 'es' ] ]

3. 对象属性描述:Object.getOwnPropertyDescriptors()

语法

Object.getOwnPropertyDescriptors()
let obj = {
  a: 1,
  b: 2
}

const res = Object.getOwnPropertyDescriptors(obj)
const res1 = Object.getOwnPropertyDescriptor(obj, 'a')
console.log(res)
console.log(res1)
{
  a: { value: 1, writable: true, enumerable: true, configurable: true },
  b: { value: 2, writable: true, enumerable: true, configurable: true }
}
{ value: 1, writable: true, enumerable: true, configurable: true }

4. 字符串扩展:String.prototype.padStart(),String.prototype.padEnd()

用于填充字符串直到指定长度,两个参数,第一个参数为目标长度,第二个字符串为用于填充的字符串

let str = '123456789'

let res = str.padStart(14, '456') // 在开始填充
let res2 = str.padEnd(14, '456') // 在结束填充

console.log(res) // 45645123456789
console.log(res2) // 12345678945645

5. 尾逗号 Tralling commas

函数参数在定义或者调用的时候,尾部可以添加一个逗号

function foo (a, b, c,) {
  console.log(a, b, c)
}

foo(4, 5, 6,)

三、ES2018(ES9)

1. 异步迭代for await of

function getPromise (time) {
  return new Promise((resovle) => {
    setTimeout(() => {
      resovle(time)
    }, time)
  })
}

const arr = [getPromise(1000), getPromise(2000), getPromise(3000)];

let main = async () => {
  for await (let item of arr) {
    console.log(item)
  }
}

main()
1000
2000
3000

2. 正则表达式扩展:dotAll,具名组匹配,后行断言

dotAll

const reg = /./
console.log(reg.test('5')) // true
console.log(reg.test('x')) // true
console.log(reg.test('\n')) // false
console.log(reg.test('\r')) // false
console.log(reg.test('\u{2028}')) // false
console.log(reg.test('\u{2029}')) // false
const reg = /./s
console.log(reg.test('5')) // true
console.log(reg.test('x')) // true
console.log(reg.test('\n')) // true
console.log(reg.test('\r')) // true
console.log(reg.test('\u{2028}')) // true
console.log(reg.test('\u{2029}')) // true
修饰符 含义
g 全局匹配
i 忽略大小写
m 跨行匹配
y 粘性
u unicode
s .匹配任意单个字符

具名组匹配:可以为分组命名

const { groups: { year, month, day } } = /(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})/.exec('2012-02-02')
console.log(year, month, day) // 2012 02 02

后行断言,寻找后面的内容,但前面需要满足一定条件

// 以ecma开头的script
const str = 'ecmascript'
console.log(str.match(/(?<=ecma)script/))
// 不以ecma开头的script
const str = 'ecmascript'
console.log(str.match(/(?<!ecma)script/))

3. 对象扩展:Rest & Spread

4. Promise.prototype.finally()

无论Promise成功还是失败都会执行finally

let promise = new Promise((resovle, reject) => {
  setTimeout(() => {
    // resovle('success')
    reject('fail')
  }, 1000)
})

promise.then(res => {
  console.log(res)
}).catch(err => {
  console.log(err)
}).finally(() => {
  console.log('finally')
})

5. 字符串扩展:放松模板字符串文字限制

四、ES2019(ES10)

1. 对象扩展:Object.fromEntries()

将数组或者map转为对象

const entries = Object.entries({
  name: 'imooc',
  course: 'es'
})
console.log(entries)

const fromEntries = Object.fromEntries([['name', 'imooc'], ['course', 'es']])
console.log(fromEntries)

const map = new Map()
map.set('name', 'imooc')
map.set('course', 'es')
const fromEntries2 = Object.fromEntries(map)
console.log(fromEntries2)
[ [ 'name', 'imooc' ], [ 'course', 'es' ] ]
{ name: 'imooc', course: 'es' }
{ name: 'imooc', course: 'es' }

2. 字符串扩展:String.prototype.trimStart() String.prototype.trimEnd()

用于去掉字符串开始的空格与结束的空格

let str = '     string         '
console.log(str.trimStart(), str.trimLeft())
console.log(str.trimEnd(), str.trimRight())
string          string         
     string      string

3. 数组扩展:Array.prototype.flat(),Array.prototype.flatMap()

4. 修订Function.prototype.toString()

现在可以返回注释了

function foo () {
  // 这是ES10
  console.log('imooc')
}
console.log(foo.toString())
function foo () {
  // 这是ES10
  console.log('imooc')
}

6. JSON扩展:JSON superset,JSON.stringify()增强能力

eval('var str="imooc";\u2029 function foo(){return str;}')
console.log(foo())
// 0xD800 ~ 0xDfff
console.log(JSON.stringify('\uD83D\uDE0E'))
console.log(JSON.stringify('\uD83D'))
imooc
"😎"
"\ud83d"

7. Symbol扩展:Symbol.prototype.description

let s = Symbol('imooc')
console.log(s)
console.log(s.description)
Symbol(imooc)
imooc
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,015评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,262评论 1 292
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,727评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,986评论 0 205
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,363评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,610评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,871评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,582评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,297评论 1 242
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,551评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,053评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,385评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,035评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,079评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,841评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,648评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,550评论 2 270