ECMAScript 2022

  • หน้าก่อนหน้า JS 2021
  • หน้าต่อไป JS 2023

เวอร์ชั่นหมายเลขของ JavaScript

เวอร์ชั่น ECMAScript เก่าตั้งชื่อด้วยตัวเลข: ES5 และ ES6

ตั้งแต่ปี 2016 มาตั้งชื่อเวอร์ชั่นด้วยปี: ES2016, 2018, 2020, 2022

คุณสมบัติใหม่ของ ES2022

แจ้งเตือน:

คุณสมบัติเหล่านี้เป็นของเรียนใหม่

เวอร์ชั่นเบราซเรอร์เก่าอาจจำเป็นต้องใช้โค้ดแทน (Polyfill)

JavaScript Array at()

ES2022 ได้นำเข้าวิธีที่แสดงคำว่า array at():

ตัวอย่าง 1

ได้รับองค์ประกอบที่สามของรายการ fruits:

const fruits = ["Banana", "Orange", "Apple", "Mango"];
let fruit = fruits.at(2);

ทดลองด้วยตัวเอง

ตัวอย่าง 2

ได้รับองค์ประกอบที่สามของรายการ fruits:

const fruits = ["Banana", "Orange", "Apple", "Mango"];
let fruit = fruits[2];

ทดลองด้วยตัวเอง

at() วิธีนี้คืนองค์ประกอบที่มีดัชนีที่กำหนดในรายการ

at() 方法与 [] 返回的结果相同。

自 2022 年 3 月起,所有现代浏览器中均支持 at() 方法:

Chrome Edge Firefox Safari Opera
Chrome 92 Edge 92 Firefox 90 Safari 15.4 Opera 78
เมษายน 2021 2021 年 7 月 2021 年 7 月 2022 年 3 月 2021 年 8 月

แจ้งเตือน:

หลายภาษาอนุญาตใช้ดัชนีลบ (เช่น [-1])เข้าถึงองค์ประกอบสุดท้ายของประเภทเป้าหมาย

นี่ไม่สามารถทำได้ใน JavaScript เพราะ [] ใช้เพื่อเข้าถึงรายการและประเภทสิ่ง

at() วิธีนี้ได้นำเข้าใน ES2022 เพื่อแก้ปัญหานี้

JavaScript String at()

ES2022 ได้นำเข้าวิธีที่แสดงคำว่า string at():

ตัวอย่าง 1

ได้รับอักษรที่สามของตัวแปร name:

const name = "W3Schools";
let letter = name.at(2);

ทดลองด้วยตัวเอง

ตัวอย่าง 2

ได้รับอักษรที่สามของตัวแปร name:

const name = "W3Schools";
let letter = name[2];

ทดลองด้วยตัวเอง

at() 方法从字符串中返回指定索引的字符。

at() 方法与 [] 返回的结果相同。

自 2022 年 3 月起,所有现代浏览器中均支持 at() 方法:

Chrome Edge Firefox Safari Opera
Chrome 92 Edge 92 Firefox 90 Safari 15.4 Opera 78
เมษายน 2021 2021 年 7 月 2021 年 7 月 2022 年 3 月 2021 年 8 月

RegExp d 修饰符

ES2022 添加了 /d 修饰符,用于表示匹配的开始和结束。

try {

let text = "aaaabb";
let result = text.match(/(aa)(bb)/d);

ทดลองด้วยตัวเอง

RegExp 修饰符用于指定不区分大小写,以及其他全局搜索:

修饰符 描述 试一试
g 执行全局匹配(查找所有)。 试一试
i 执行不区分大小写的匹配。 试一试
d 执行子字符串匹配(ES2022 新增)。 试一试
m 执行多行匹配。 试一试

Object.hasOwn()

ES2022 提供了一种安全的方法来检查属性是否是对象的自有属性。

Object.hasOwn() 类似于 Object.prototype.hasOwnProperty,但支持所有对象类型。

try {

Object.hasOwn(myObject, age)

ทดลองด้วยตัวเอง

Error Cause

ตัวอย่าง

try {

connectData(); 
  catch (err) { 
} 
  throw new Error("Connecting failed.", { cause: err }); 
}

ทดลองด้วยตัวเอง

await import JavaScript

JavaScript โมดูลสามารถรอครบทรัพยากรที่ต้องการนำเข้าก่อนที่จะปฏิบัติงาน:

import {myData} from './myData.js';
const data = await myData();

ประกาศฟิลด์คลาส JavaScript

class Hello {
  counter = 0; // ฟิลด์คลาส
}
const myClass = new Hello();
let x = myClass.counter;

ตั้งแต่เดือนเมษายน 2021 ข้างนี้ ทุกบราวเซอร์สมัยใหม่เข้าใจการประกาศฟิลด์ในรูปแบบคลาส:

Chrome Edge Firefox Safari Opera
Chrome 72 Edge 79 Firefox 69 Safari 14.1 Opera 60
2019 มกราคม มกราคม 2020 2019 สิงหาคม เมษายน 2021 มกราคม 2020

JavaScript วิธีและสิ่งส่วนตัว

class Hello {
  #counter = 0;  // สิ่งส่วนตัว
  #myMethod() {} // วิธีส่วนตัว
}
const myClass = new Hello();
let x = myClass.#counter; // ผิดพลาด
myClass.#myMethod();      // ผิดพลาด

ตั้งแต่เดือนมิถุนายน 2021 มีการสนับสนุนวิธีและสิ่งส่วนตัวในทุกเบราเซอร์สมัยใหม่:

Chrome Edge Firefox Safari Opera
Chrome 74 Edge 79 Firefox 90 Safari 14.1 Opera 62
เมษายน 2019 มกราคม 2020 มิถุนายน 2021 เมษายน 2021 มิถุนายน 2019
  • หน้าก่อนหน้า JS 2021
  • หน้าต่อไป JS 2023