ES-2020新特性

ES-2020新特性

一:可选链式调用

1.访问对象属性

const flower = {

    colors: {

        red: true

    }

}


console.log(flower.colors.red) // 正常运行


console.log(flower.species.lily) // 抛出错误:TypeError: Cannot read property 'lily' of undefined

console.log(flower.species ? flower.species.lily :null) // 先判断存在再取值



console.log(flower.colors?.red) // 输出 true

console.log(flower.species?.lily) // 输出 undefined


2.访问数组属性优点:对象里有缺少字段或者后端应该返回{}的时候返回Null或undifind报错,而不用使用三木运算判断

 展开源码 

const flower = {

    colors: {

        red: true

    },

arr: [1,2,3]

}

let flowers =  ['lily', 'daisy', 'rose']


console.log(flowers[1]) // 输出:daisy


flowers = null


console.log(flowers[1]) // 抛出错误:TypeError: Cannot read property '1' of null

console.log((flowers && flowers.length) ? flowers[1] : undefined) // 常规判断

console.log(flowers?.[1]) // 输出:undefined

优点:对象里有缺少字段或者后端应该返回[]的时候返回Null或undifind或[]报错,而不用使用三木运算判断

3.调用函数

 展开源码 

let plantFlowers = () => {

  return 'orchids'

}


console.log(plantFlowers()) // 输出:orchids


plantFlowers = null


console.log(plantFlowers()) // 抛出错误:TypeError: plantFlowers is not a function   aa instanceof Function

console.log((plantFlowers instanceof Function) ? plantFlowers() : null) // 判断函数类型再调用 instanceof Function

console.log(plantFlowers?.()) // 输出:undefined



二:空值合并

 展开源码 

let number = 1

// let number = 0

let myNumber = number || 7

let myNumber = number ?? 7

myNumber

优点:操作符右边的值仅在左边的值等于null 或 undefined 时有效,如果接口返回01,或true/false时用||逻辑会有问题可以用??

三:私有字段

 展开源码 

class Flower {

  #leaf_color = "green";

  constructor(name) {

    this.name = name;

  }


  get_color() {

    return this.#leaf_color;

  }

}


const orchid = new Flower("orchid");


console.log(orchid.get_color()); // 输出:green

console.log(orchid.#leaf_color) // 报错:SyntaxError: Private field '#leaf_color' must be declared in an enclosing class

// 现在才引入了私有字段。要定义私有属性,必须在其前面加上散列符号:#。如果我们从外部访问类的私有属性,势必会报错。


四:Promise.allSettled 方法


 展开源码 

promise_1 = Promise.resolve('hello')

promise_2 = new Promise((resolve, reject) => setTimeout(reject, 200, 'problem'))



Promise.all([promise_1, promise_2])

    .then(([promise_1_result, promise_2_result]) => {

        console.log(promise_1_result)

        console.log(promise_2_result)

    })

// 输出Promise {<pending>}

Promise.allSettled([promise_1, promise_2])

    .then(([promise_1_result, promise_2_result]) => {

        console.log(promise_1_result) // 输出:{status: 'fulfilled', value: 'hello'}

        console.log(promise_2_result) // 输出:{status: 'rejected', reason: 'problem'}

    })



优点:有接口报错时不影响其他接口返回,报错接口也会返回status和reason


五:globalThis 全局对象

 展开源码 

// 浏览器

window == globalThis // true

globalThis.location

// node.js

global == globalThis // true

优点:浏览器中可用的全局对象是变量window,但在 Node.js 中是一个叫做 global 的对象。为了在不同环境中都使用统一的全局对象,引入了 globalThis




不常用的新特性:

[if !supportLists]1. [endif]

静态字段

[if !supportLists]2. [endif]

[if !supportLists]3. [endif]

顶级Await

[if !supportLists]4. [endif]

[if !supportLists]5. [endif]

Dynamic Import 动态引入(考虑到许多应用程序使用诸如webpack 之类的模块打包器来进行代码的转译和优化,这个特性现在还没什么大作用

[if !supportLists]6. [endif]

[if !supportLists]7. [endif]

MatchAll 匹配所有项

[if !supportLists]8. [endif]

[if !supportLists]9. [endif]

BigInt:JavaScript 中能够精确表达的最大数字是 2^53 - 1。而 BigInt 可以用来创建更大的数字

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

推荐阅读更多精彩内容