当前位置:首页 > 科技  > 软件

ES13中五个最具变革性的JavaScript特性

来源: 责编: 时间:2024-07-25 16:45:31 529观看
导读ES13包含了许多有价值的特性,彻底改变了我们编写JavaScript的方式。从异步升级到数组语法糖等等,让我们来看看这些特性,看看你是否错过了其中一些。1. 顶级await在ES13之前,我们永远不能在全局作用域中使用await。❌ 之前

ycr28资讯网——每日最新资讯28at.com

ES13包含了许多有价值的特性,彻底改变了我们编写JavaScript的方式。ycr28资讯网——每日最新资讯28at.com

从异步升级到数组语法糖等等,让我们来看看这些特性,看看你是否错过了其中一些。ycr28资讯网——每日最新资讯28at.com

1. 顶级await

在ES13之前,我们永远不能在全局作用域中使用await。ycr28资讯网——每日最新资讯28at.com

❌ 之前:ycr28资讯网——每日最新资讯28at.com

// X 语法错误:await 只在异步函数中有效await setTimeoutAsync(3000);function setTimeoutAsync(timeout) {  return new Promise((resolve) => {    setTimeout(() => {      resolve('codingbeautydev.com');    }, timeout);  });}

我们总是必须将其放在async函数中或创建一个async IIFE(立即执行函数表达式):ycr28资讯网——每日最新资讯28at.com

// 异步立即执行函数(async () => {  await setTimeoutAsync(3000);})();// 类似 C++async function main() {  await setTimeoutAsync(3000);}

✅ ES13之后:ycr28资讯网——每日最新资讯28at.com

// ✅ 等待超时 - 没有抛出错误await setTimeoutAsync(3000);function setTimeoutAsync(timeout) {  return new Promise((resolve) => {    setTimeout(() => {      resolve('codingbeautydev.com');    }, timeout);  });}

2. 类声明升级

(1)类字段声明

在ES13之前,我们只能在构造函数中声明类字段: 与许多其他语言不同,我们不能在类的最外层作用域中声明或定义它们。ycr28资讯网——每日最新资讯28at.com

❌ 之前:ycr28资讯网——每日最新资讯28at.com

✅ 现在有了ES13: 就像在TypeScript中一样:ycr28资讯网——每日最新资讯28at.com

(2)私有方法和字段

在ES13之前,创建私有方法是不可能的。 我们还必须使用丑陋的下划线hack来表示私有性 — 但那只是一个指示。ycr28资讯网——每日最新资讯28at.com

❌ 之前:ycr28资讯网——每日最新资讯28at.com

class Person {  _firstName = 'Tari';  _lastName = 'Ibaba';  get name() {    return `${this._firstName} ${this._lastName}`;  }}const person = new Person();console.log(person.name); // Tari Ibaba// 我们仍然可以访问私有成员!console.log(person._firstName); // Tariconsole.log(person._lastName); // Ibaba// 它们也可以被修改!person._firstName = 'Lionel';person._lastName = 'Messi';console.log(person.name); // Lionel Messi

✅ ES13之后:ycr28资讯网——每日最新资讯28at.com

我们可以通过在字段前加上井号(#)来为类添加私有字段和成员:ycr28资讯网——每日最新资讯28at.com

如果你试图从类外部访问它,你会得到一个语法错误:ycr28资讯网——每日最新资讯28at.com

class Person {  #firstName = 'Tari';  #lastName = 'Ibaba';  get name() {    return `${this.#firstName} ${this.#lastName}`;  }}const person = new Person();console.log(person.name);// 语法错误:私有字段 '#firstName' 必须在封闭的类中声明console.log(person.#firstName);console.log(person.#lastName);

我们可以从错误消息中看到一些有趣的东西:ycr28资讯网——每日最新资讯28at.com

编译器甚至不期望你从类外部尝试访问私有字段 — 它假设你是在尝试创建一个。ycr28资讯网——每日最新资讯28at.com

(3)静态类字段和静态私有方法

静态字段 — 类本身的属性,而不是任何特定实例的属性。ycr28资讯网——每日最新资讯28at.com

自ES13以来,我们现在可以轻松地为任何类创建它们:ycr28资讯网——每日最新资讯28at.com

class Person {  static #count = 0;  static eyeCount = 2;  static getCount() {    // 使用 this 访问同级静态成员    return this.#count;  }  // 实例成员  constructor() {    // 使用 this.constructor 访问静态成员    this.constructor.#incrementCount();  }  static #incrementCount() {    this.#count++;  }}const person1 = new Person();const person2 = new Person();console.log(Person.getCount()); // 2

3. 数组升级:新的at()方法

通常我们会使用方括号([])来访问数组的第N个元素。ycr28资讯网——每日最新资讯28at.com

const arr = ['a', 'b', 'c', 'd'];console.log(arr[1]); // b

但从末尾访问第N个项目一直是一个痛点 -- 我们必须使用arr.length - N进行索引:ycr28资讯网——每日最新资讯28at.com

❌ ES13之前:ycr28资讯网——每日最新资讯28at.com

const arr = ['a', 'b', 'c', 'd'];// 倒数第1个元素console.log(arr[arr.length - 1]); // d// 倒数第2个元素console.log(arr[arr.length - 2]); // c

幸运的是,ES13带来了一个新的at()方法,解决了所有这些问题:ycr28资讯网——每日最新资讯28at.com

const str = 'Coding Beauty';console.log(str.at(-1)); // y 倒数第1个字符console.log(str.at(-2)); // t 倒数第2个字符

4. 静态类块

随着静态字段的出现,静态块也来了。 只在创建时执行一次代码 — 就像C#和Java等OOP语言中的静态构造函数。 所以你可以在类中创建任意多个静态块 — 所有代码都会按你定义的顺序运行:ycr28资讯网——每日最新资讯28at.com

class Vehicle {  static defaultColor = 'blue';}class Car extends Vehicle {  static colors = [];  //  
                

本文链接:http://www.28at.com/showinfo-26-103577-0.htmlES13中五个最具变革性的JavaScript特性

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 全栈开发要掌握什么技术?

下一篇: 抖音新规:整体治理虚假“身份”“内容”“营销”“流量”四类行为

标签:
  • 热门焦点
  • K60 Pro官方停产 第三方瞬间涨价

    K60 Pro官方停产 第三方瞬间涨价

    虽然没有官方宣布,但Redmi的一些高管也已经透露了,Redmi K60 Pro已经停产且不会补货,这一切都是为了即将到来的K60 Ultra铺路,属于厂家的正常操作。但有意思的是该机在停产之后
  • K60至尊版狂暴引擎2.0加持:超177万跑分斩获性能第一

    K60至尊版狂暴引擎2.0加持:超177万跑分斩获性能第一

    Redmi的后性能时代战略发布会今天下午如期举办,在本次发布会上,Redmi公布了多项关于和联发科的深度合作,以及新机K60 Ultra在软件和硬件方面的特性,例如:“K60 至尊版,双芯旗舰
  • 6月iOS设备性能榜:M2稳居榜首 A系列只能等一手3nm来救

    6月iOS设备性能榜:M2稳居榜首 A系列只能等一手3nm来救

    没有新品发布,自然iOS设备性能榜的上榜设备就没有什么更替,仅仅只有跑分变化而产生的排名变动,毕竟苹果新品的发布节奏就是这样的,一年下来也就几个移动端新品,不会像安卓厂商,一
  • 如何使用JavaScript创建一只图像放大镜?

    如何使用JavaScript创建一只图像放大镜?

    译者 | 布加迪审校 | 重楼如果您曾经浏览过购物网站,可能遇到过图像放大功能。它可以让您放大图像的特定区域,以便浏览。结合这个小小的重要功能可以大大改善您网站的用户体验
  • 微信语音大揭秘:为什么禁止转发?

    微信语音大揭秘:为什么禁止转发?

    大家好,我是你们的小米。今天,我要和大家聊一个有趣的话题:为什么微信语音不可以转发?这是一个我们经常在日常使用中遇到的问题,也是一个让很多人好奇的问题。让我们一起来揭开这
  • 虚拟键盘 API 的妙用

    虚拟键盘 API 的妙用

    你是否在遇到过这样的问题:移动设备上有一个固定元素,当激活虚拟键盘时,该元素被隐藏在了键盘下方?多年来,这一直是 Web 上的默认行为,在本文中,我们将探讨这个问题、为什么会发生
  • 三分钟白话RocketMQ系列—— 如何发送消息

    三分钟白话RocketMQ系列—— 如何发送消息

    我们知道RocketMQ主要分为消息 生产、存储(消息堆积)、消费 三大块领域。那接下来,我们白话一下,RocketMQ是如何发送消息的,揭秘消息生产全过程。注意,如果白话中不小心提到相关代
  • WebRTC.Net库开发进阶,教你实现屏幕共享和多路复用!

    WebRTC.Net库开发进阶,教你实现屏幕共享和多路复用!

    WebRTC.Net库:让你的应用更亲民友好,实现视频通话无痛接入! 除了基本用法外,还有一些进阶用法可以更好地利用该库。自定义 STUN/TURN 服务器配置WebRTC.Net 默认使用 Google 的
  • 自律,给不了Keep自由!

    自律,给不了Keep自由!

    来源 | 互联网品牌官作者 | 李大为编排 | 又耳 审核 | 谷晓辉自律能不能给用户自由暂时不好说,但大概率不能给Keep自由。近日,全球最大的在线健身平台Keep正式登陆港交所,努力
Top