เป็นเวลาแปดปีแล้วที่ ECMASCRIPT เปิดตัว ES6 อย่างเป็นทางการในปี 2558 ตั้งแต่ปี 2558 จะมีการเผยแพร่เวอร์ชันใหม่ในเดือนมิถุนายนทุกปีโดยมีปีในเวลานั้นเป็นหมายเลขเวอร์ชัน
ฟีเจอร์ใหม่จำนวนมากปรากฏในหลาย ๆ รุ่นเหล่านี้
PS: ข้อมูลบางอย่างบอกว่าทุกรุ่นหลังจาก ES2015 เรียกว่า ES6 และบางคนบอกว่า ES6 หมายถึง ES2015, ES7 หมายถึง ES2016 และอื่น ๆ ซึ่งจะไม่กล่าวถึงที่นี่
ES2015 เป็นรุ่นที่มีการเปลี่ยนแปลงที่ใหญ่ที่สุด
ขอให้คำ
var
const
let
ระดับ
ดังต่อไปนี้:
// ตัวแปรการประกาศให้ V = 100 V = 200 // ประกาศ const const v = 200 // แก้ไขค่าคงที่ // v = 300 //
รายงาน
ข้อ
const
let
var v = 100 - - ให้วาล = 200 - console.log (v) console.log (val) // ข้อผิดพลาด Val ไม่ได้กำหนดไว้
เป็นสิ่งที่ควรค่าแก่การสังเกตว่าตัวแปรที่ประกาศใช้คำหลัก let
หรือ const
ไม่มีลักษณะของการส่งเสริมตัวแปรและมีโซนตายชั่วคราว
ช่วยให้ฟังก์ชั่นใช้ค่าเริ่มต้นใน
ES2015 V = V? V: 100 กลับ V - // ES2015 แถบฟังก์ชัน (v = 100) { กลับ V }
เป็นที่น่าสังเกตว่า หากมีพารามิเตอร์หลายพารามิเตอร์ต้องใช้พารามิเตอร์เริ่มต้นจากด้านหน้าไปด้านหน้า
ฟังก์ชั่นลูกศรจะถูกเพิ่มเข้ามาใน ES2015 ซึ่งเป็นรูปแบบการจดช ว
เลข กลับ v`` - // ฟังก์ชั่นลูกศรเขียน const foo = (v) => { กลับ V - // ตัวย่อ 1 const foo = v => {// มีพารามิเตอร์เดียวเท่านั้นที่สามารถละเว้นวงเล็บส่งคืน v - // ตัวย่อ 2 const foo = v => v // คุณสามารถละเว้นการส่งคืนและการจัดฟันดัดผมเมื่อมีการส่งคืนในคำ
this
this
.
เมื่อใช้ฟังก์ชั่นลูกศรไม่มีวัตถุอาร์กิวเมนต์ภายใน แต่ใช้พารามิเตอร์ที่เหลือ
อยู่
แทน
// console.log (อาร์กิวเมนต์) // ReferenceRror: อาร์กิวเมนต์ไม่ได้กำหนดไว้ console.log (args) // args เป็นอาร์เรย์} Foo (1, 2, 3, 4) // [1, 2, 3, 4]แอตทริบิวต์ชื่อที่เพิ่มเข้า
มา
ในฟังก์ชันใน ES2015 ชี้ไปที่ชื่อของ
ฟังก์ชัน { กลับ V - const bar = v => v console.log (foo.name) // fooconsole.log (bar.name) //
Number
Math
บาร์
ใน ES2015 มีการใช้ 0b
หรือ 0B
เพื่อเป็นตัวแทนของไบนารีและ 0o
หรือ 0O
ใช้เพื่อเป็นตัวแทนของแปดค่า
รหัสตัวอย่างมีดังนี้:
console.log (0b1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111) console.log (0O777 === 511) //
แอตทริบิวต์และวิธีการขยายโดยจริงสำหรับตัวเลขมีดังนี้:
แอตทริบิวต์/ชื่อชื่อคำ | อธิบาย |
---|---|
หมายเลข. epsilon | ตัวเลขความแม่นยำต่ำสุด |
ตัวเลข MIN_SAFE_INTEGER | หมายเลขปลอดภัยขั้นต่ำ ( -2^53 ) |
หมายเลข max_safe_integer | หมายเลขความปลอดภัยสูงสุด ( 2^53 ) |
number.parseint () | วิเคราะห์พารามิเตอร์ลงในจำนวนเต็มและส่งคืน |
หมายเลข parsefloat () | วิเคราะห์พารามิเตอร์ลงในหมายเลขจุดลอยตัวและส่ง |
คืน | หมายเลข |
Number.isinteger
( | ) |
กำหนด | ว่า |
เป็น | จำนวนเต็ม |
หรือ | ไม่ |
---|
Math.trunc
() ส่งส่วน | 正数1、负数-1、零0 |
ของ | ค่า |
จะ
เก็บรูปแบบไว้และสามารถใช้ตัวแปร
ได้
// สตริงเทมเพลตสามารถรักษารูปแบบให้ str2 = `ชามสัปดาห์ ' // สตริงเทมเพลตสามารถใช้ตัวแปร const myname = 'ชามสัปดาห์' ให้ str3 = `ผู้แต่ง: $ {myname}` // ใช้ $ {} เพื่อห่อ
ES2015 ยังขยายวิธีการบางอย่างสำหรับสตริงและอินสแตนซ์สตริงดังต่อไปนี้:
ชื่อเมธอด | คำอธิบาย | |
---|---|---|
สตริง | FromCodePoint () | unicode string.raw |
() | ส่งคืนสตริงด้วยสแลชทั้งหมดหลบหนี (นั่นคือสแลชจะถูกเพิ่มก่อนที่จะสแลช) ซึ่งมักใช้สำหรับการประมวลผลสตริงเทมเพลต | |
string.prototype.codepointat () | ส่งคืนจุดรหัสที่สอดคล้องกับอักขระ (การทำงานแบบผกผันของ string.fromcodepoint ()) | |
สตริง | . | unicode normalization) |
. | prototype.repeat | |
() | ทำซ้ำสตริง n ครั้งและส่งคืนสตริงที่ | |
ประมวล | ผล | |
สตริง | ||
ต้นฉบับ | |
และแยกออกเป็นเครื่องหมายจุลภาค,
รหัสตัวอย่างดังนี้:
const arr = [1, 2, 3, 4, 5, 6] const newarr = [... arr] // คัดลอกอาร์เรย์ console.log (math.max.call (null, ... arr)) // ใช้แต่ละรายการในอาร์เรย์เป็นพารามิเตอร์
นอกจากนี้ จัดเตรียมชุดของวิธีการซึ่งจะถูกนำมาใช้ทีละหนึ่ง:
array.from ()
Array.from()
สร้างวัตถุคล้ายอาร์เรย์หรือวัตถุที่วนซ้ำเป็นอาร์เรย์ใหม่
return array. จาก (อาร์กิวเมนต์) // แปลงอาร์กิวเมนต์เป็นอาร์เรย์} console.log (foo (1, 2, 3, 4, 5, 6)) // [1, 2, 3, 4, 5, 6]
Array.of()
: สร้างอาร์เรย์ใหม่ที่มีจำนวนอาร์กิวเมนต์ตัวแปร ตัวอย่าง รหัสตัวอย่างมีดังนี้:
array.of (1) // [1] array.of (จริง, 1, 'หนึ่งชามสัปดาห์') // [true, 1, 'หนึ่งชามสัปดาห์']
array.prototype.copywithin (), คัดลอกส่วนหนึ่งของอาร์เรย์ไปยังสถานที่อื่นในอาร์เรย์เดียวกัน และการกลับมามันจะไม่เปลี่ยนความยาวของอาร์เรย์ดั้งเดิม
รหัสตัวอย่างมีดังนี้:
const arr = [1, 2, 3, 4] // เริ่มต้นที่ดัชนี 2 และคัดลอกเนื้อหาเป็นดัชนี 0 ที่ปลาย arr.copywithin (0, 2) // [3, 4, 3, 4]
Array.prototype.find()
ตามฟังก์ชันการเรียกกลับที่กำหนด ค้นหาองค์ประกอบการจับคู่แรกและกลับมาที่ไม่ได้กำหนดหากไม่
พบ arr.find (item => item === 2) // 2 (องค์ประกอบระบุ),
Array.prototype.findIndex()
ตามฟังก์ชั่นการโทรกลับที่กำหนดค้นหาดัชนีขององค์ประกอบการจับคู่แรกกลับมาหากไม่พบ - 1 , รหัสตัวอย่างมีดังนี้:
const arr = [1, 2, 3, 4] arr.findindex (item => item === 2) // 1 (ระบุดัชนี)
array.prototype.fill
Array.prototype.fill()
เติมอาร์เรย์ด้วยค่าที่ กำหนด
, 3, 4] // เติมดัชนี 1-3 ด้วยค่าที่กำหนด arr.fill ('ชามสัปดาห์', 1, 3) // [1, 'ชามสัปดาห์', 'ชามสัปดาห์', 4]
Array.prototype.keys()
ส่งคืนวัตถุที่วนซ้ำซึ่งมีเนื้อหา เป็นกุญแจสำคัญของอาร์เรย์ รหัสตัวอย่างมีดังนี้:
const arr = [1, จริง, 'ชามสัปดาห์'] คีย์ const = arr.keys () สำหรับ (const i of Keys) { console.log (I) // ผลการสำรวจ 0 1 2 }array.prototype.values () ส่งคืนวัตถุ
ที่
วนซ้ำซึ่ง
Array.prototype.values()
คือค่าของอาร์เรย์
ค่า const = arr.values () สำหรับ (const i ของค่า) { console.log (I) // ผลการสำรวจ 1 จริงชามสัปดาห์}
1
Array.prototype.entries()
ส่งคืนวัตถุที่วนซ้ำซึ่งเนื้อหาเป็นอาร์เรย์ 0
ของ
อาร์เรย์
ดั้งเดิม
const iterator = arr.entries () console.log (array. จาก (iterator)) // [[0, 1], [1, true], [2, 'ชามสัปดาห์']]
ใน ES2015 อนุญาตให้ชื่อแอตทริบิวต์ของวัตถุและ
ค่าแอตทริบิวต์ที่จะสอดคล้อง
กัน
คุณสามารถเขียนชื่อแอตทริบิวต์ได้
อายุ Const = 18 const person = {myName, อายุ} console.log (บุคคล) // {myname: 'ชามของโจว', อายุ: 18}
นอกจากนี้เมื่อกำหนดวัตถุคุณจะได้รับอนุญาตให้ใช้ [] นิพจน์ที่ห่อเป็นชื่อแอตทริบิวต์
Const myname = 'A Bowl Week' อายุ Const = 18 const person = { myname, ['A' + 'G' + 'E']: อายุ, - console.log (บุคคล) // {myname: 'หนึ่งชาม zhou', อายุ: 18}
Object.is()
: ใช้เพื่อเปรียบเทียบว่าค่าสองค่าเท่ากันหรือไม่ === - 0 ปัญหา
รหัสตัวอย่างมีดังนี้:
console.log (nan === nan) // false console.log (+0 === -0) // true console.log (object.is (nan, nan)) // true console.log (object.is (+0, -0)) // false
Object.assign()
: คัดลอกค่าของคุณสมบัติที่สามารถระบุได้ทั้งหมดจากวัตถุแหล่งหนึ่งหรือมากกว่าไปยังวัตถุเป้าหมายและส่งคืนวัตถุเป้าหมาย
ตัวอย่าง รหัสมีดังนี้:
const person = object.assign ({}, {ชื่อ: 'หนึ่งชาม Zhou'}, {อายุ: 18}) console.log (บุคคล) // {ชื่อ: 'หนึ่งชาม Zhou', อายุ: 18}
Object.setPrototypeOf()
(Object.getPrototypeOf()
: รับวัตถุต้นแบบ ;นำเสนอแนวคิดของคลาสใน ES2015 และคลาสมีอยู่ในระดับ
ไวยากรณ์ ตัวสร้าง (อายุ) { // แอตทริบิวต์ this.myname = 'ชามสัปดาห์' this.age = อายุ - // วิธีการพิมพ์แบบสแตติกแบบคงที่ () { console.log () - // accessor รับ myname () { console.log ('getter') กลับ 'ชามสัปดาห์' - ตั้งค่า myName (v) { console.log ('setter' + v) - setName (v) { this.myname = v - - คน const = บุคคลใหม่ (18)person.setName (
ywanzhou') // ทริกเกอร์ setter accessor console.log (person.myname) // ทริกเกอร์ getter
accessor
ข้อมูลจำเพาะ
เราได้รับอนุญาตให้ใช้การส่งออกไปยังโมดูลส่งออกและนำเข้าเพื่อแนะนำ
โมดูล นำเข้า a, {b} จาก 'm' // นำเข้าการส่งออกเริ่มต้นในโมดูล m และนำเข้าสมาชิก B และแยกต่างหาก b นำเข้า * เป็นจาก 'M' // นำเข้าสมาชิกทั้งหมดในการนำเข้าโมดูล 'M' // ดำเนินการโมดูล M โมดูลส่งออก const b = 1 // ส่งออกแยกออกจากการส่งออกค่าเริ่มต้น B // การส่งออกค่าเริ่มต้น {B} // ส่งออกตามความต้องการ การส่งออก {b เป็น bb} // เปลี่ยนชื่อและส่งออกส่งออก {b} จาก 'm' // นำเข้าสมาชิก B ในโมดูล M และการส่งออก
โครงสร้าง
อาร์เรย์หรือแยกค่าที่
ระบุ
จากวัตถุ
ของ Zhou ', 18] // สลับค่าของตัวแปรทั้งสองให้ A = 1 ให้ b = 2 ; [a, b] = [b, a] console.log (a, b) // 2 1 // การกำหนดโครงสร้างวัตถุให้ {ชื่อ: objname/* การทำลายโครงสร้างการเปลี่ยนชื่อ*/, sex} = {ชื่อ: 'ชามแห่งสัปดาห์', เพศ: 1} // การกำหนดโครงสร้างการกำหนดค่าพารามิเตอร์ฟังก์ชันแถบฟังก์ชัน ({ชื่อ, อายุ}) { ชื่อคืน + อายุ - Bar ({ชื่อ: 'A Bowl of Week', อายุ: 18}) //สัญลักษณ์
เป็น Symbol()
ข้อมูลใหม่ใน ES2015 พารามิเตอร์
* ไวยากรณ์ * สัญลักษณ์ ([คำอธิบาย]) * * คำอธิบาย -> เป็นข้อมูลคำอธิบายเพิ่มเติม *// // สร้างค่าของประเภทสัญลักษณ์ const mysymbol = symbol () console.log (mysymbol) // symbol () Const myName = Symbol ('A Bowl of Weeks') console.log (typeof myname) //
สัญลักษณ์สัญลักษณ์ยังมีชุดของคุณสมบัติและวิธีการที่จะไม่ได้รับการแนะนำที่นี่
เป็น วิธีแก้ปัญหาแบบอะซิงโครนัส ที่ให้ไว้ใน ES2015 ซึ่งแก้ปัญหาของการโทรกลับนรก
วัตถุ สัญญา สามารถสร้างได้ผ่านตัวสร้าง Promise()
มีเพียงสองประเภทของการสลับสถานะคือ:
Promise
Promise
then
แก้ไข
then
เมธอดก็มีอินสแตนซ์ Promise
จะถูกส่งคืน
ดังที่แสดงในรูปด้านล่าง:
รหัสตัวอย่างมีดังนี้:
สัญญาใหม่ ((แก้ไข, ปฏิเสธ) => { console.log ('ฉันเป็นบันทึกในสัญญาแรก') แก้ไข() - .แล้ว(() => { console.log ('ฉันเป็นบันทึกในครั้งแรกแล้ว') - .แล้ว(() => { console.log ('ฉันเป็นบันทึกในวินาทีจากนั้น แต่ฉันมีข้อยกเว้น') โยนข้อผิดพลาดใหม่ ('ข้อผิดพลาด') - .แล้ว(() => { console.log ('ฉันเป็นบันทึกการโทรกลับครั้งแรกในครั้งที่สาม แต่ฉันจะไม่ดำเนินการเพราะมีข้อยกเว้นที่เกิดขึ้นเหนือฉัน') - console.log ('ฉันเป็นบันทึกการโทรกลับครั้งที่สองในครั้งที่สามจากนั้นฉันก็ดำเนินการ')) - .แล้ว(() => { console.log ('ฉันเป็นบันทึกในสี่แล้วฉันสามารถดำเนินการตามปกติ') - /* ผลการดำเนินการมีดังนี้: ฉันเป็นบันทึกในสัญญาแรก ฉันเป็นบันทึกในตอนแรกแล้ว ฉันเป็นคนที่สองในครั้งที่สอง แต่ฉันได้รับการ
ยกเว้น วิธีการของสัญญามีดังนี้:
Promise.prototype.catch()
then
Promise.prototype.then()
มันต้องการพารามิเตอร์สองตัวส่วนใหญ่: ฟังก์ชั่นการเรียกกลับของความสำเร็จและความล้มเหลวของสัญญาPromise.all()
: แพ็คหลายอินสแตนซ์เป็นอินสแตนซ์ใหม่ส่งคืนอาร์เรย์ผลลัพธ์หลังจากการเปลี่ยนแปลงสถานะอินสแตนซ์ทั้งหมด (เปลี่ยนแปลงการเปลี่ยนแปลงทั้งหมดจากนั้นส่งคืน)Promise.race()
: แพ็คหลายอินสแตนซ์เป็นอินสแตนซ์ใหม่คืนสถานะอินสแตนซ์ทั้งหมดจัดลำดับความสำคัญ เปลี่ยนผลลัพธ์ (เปลี่ยนก่อนและส่งคืนก่อน)Promise.resolve()
: แปลงวัตถุเป็นวัตถุสัญญา (เทียบเท่ากับ new Promise(resolve => resolve())
)Promise.reject()
: แปลงวัตถุเป็นสถานะของ rejected
วัตถุสัญญา (เทียบเท่ากับ new Promise((resolve, reject) => reject())
)iterator เป็นตัววนซ้ำ โครงสร้างการปรับใช้อินเทอร์เฟซการวนซ้ำสามารถข้ามไปได้ด้วยวิธีที่เป็นเอกภาพ
โครงสร้างข้อมูลที่ใช้อินเทอร์เฟซที่วนซ้ำโดยทั่วไปจะใช้ตัวเองหรือสืบทอดแอตทริบิวต์ Symbol.iterator
และเป็นวัตถุที่วนซ้ำ คุณสมบัติ Symbol.iterator
นั้นเป็นฟังก์ชันซึ่งเป็นฟังก์ชั่นการสร้างตัววนซ้ำเริ่มต้นของโครงสร้างข้อมูลปัจจุบัน
วัตถุที่มีวิธี next()
สามารถเรียกได้ว่าเป็นวัตถุที่วนซ้ำ วัตถุ next()
จะส่งคืนวัตถุที่มีสองค่า
ดังที่แสดงด้านล่าง:
value
: ค่า JavaScript
ใด ๆ ที่ส่งคืนโดยตัววนซ้ำ สามารถละเว้นได้เมื่อ done
true
done
true
ค่าบู value
false
อินเทอร์เฟซตัววนซ้ำที่ให้โดย JavaScript แสดงไว้ในรูปด้านล่าง:
ตอนนี้เราใช้ตัววนซ้ำสำหรับ OBJ รหัสมีดังนี้:
const obj = { [symbol.iterator] () { กลับ { ต่อไป () { console.log ('iterator ดำเนินการ'); กลับ { ค่า: '', ทำ: จริง // ธงไม่ว่าจะจบลงจริงหมายถึงมันจบลง} - - - }เรา
การพิมพ์ในวิธี next()
(
)
คำหลักของ function
ใช้ *
เครื่องหมายดอกจันระหว่างชื่อฟังก์ชั่นและชื่อฟังก์ชันและใช้คำหลัก yield
ภายในฟังก์ชั่นเพื่อกำหนดสถานะที่แตกต่างกัน
โค้ดตัวอย่างมีดังนี้:
function* testGenerator () { // ผลผลิตกำหนดอัตราผลตอบแทนของรัฐ 'ชามสัปดาห์' ให้ผลผลิต 'คุณสมบัติ ESNEW' return 'generator' // terminate generator แม้ว่าจะมีคำหลักในภายหลัง แต่ก็จะไม่ถูกต้อง} const g = testGenerator () // ส่งคืนวัตถุเครื่องกำเนิดและย้ายสถานะผ่านวิธีถัดไป () วิธี g.next () / * {value: 'A zhou', ทำ: false} *// G.Next () / * {value: 'es คุณสมบัติใหม่', ทำ: false} *// G.Next () / * {value: 'Generator', Done: TRUE} */พร็
อก |
---|
วัตถุพร็อกซี reffect ถูกใช้เพื่อสร้างวัตถุพร็อกซีเพื่อใช้การสกัดกั้นและการปรับแต่งของการดำเนินการขั้นพื้นฐาน
วิธีการวิธี | การทริกเกอร์ |
---|---|
ได้รับ (เป้าหมาย, โพรควร, ตัวรับ) | เพื่ออ่าน |
ชุดคุณสมบัติบางอย่าง (เป้าหมาย, โพรควร, ค่า, ตัวรับ) | เพื่อเขียนคุณสมบัติบางอย่าง |
มี (เป้าหมาย, propkey) | ในผู้ประกอบการ |
deleteProperty (เป้าหมาย, propkey) | ลบผู้ประกอบการ |
getPrototypeof ( Target) | Object.getProperTypeof () |
setPrototypeof (เป้าหมาย, proto) | Object.setPrototypeof () |
isextensible (เป้าหมาย) | Object.isextensible () |
preventextensions (เป้าหมาย) | Object.preventExtensions () |
GetOwnPropertyDescriptor | ( |
เป้าหมาย , prockey, propdesc) | object.defineproperty () |
OwnKeys (เป้าหมาย) | Object.keys (), Object.getOwnPropertyNames (), Object.getOwnPropertySymbols () |
ใช้ (เป้าหมาย, thisarg, args) | เรียกฟังก์ |
ชั่ | น การเรียกใช้ฟัง |
ก์
Proxy
Proxy
<html lang="th"> <หัว> <meta charset = "utf-8" /> <meta http-equiv = "x-ua ที่เข้ากันได้" เนื้อหา = "ie = edge" /> <meta name = "viewport" content = "width = ความกว้างของอุปกรณ์, ระดับเริ่มต้น = 1.0" /> <link href = "https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/5.0.2/css/bootstrap.min.css" rel = "ภายนอก nofoll <title> อัปเดต DOM ผ่าน Set </title> โดยอัตโนมัติโดยอัตโนมัติ </หัว> <ร่างกาย> <p class = "card" style = "ความกว้าง: 300px; มาร์จิ้น: 100px auto"> <p class = "การ์ดการ์ด"> <h1 id = "ชื่อ"> </h1> <button id = "btn" class = "btn btn-primary"> แก้ไข </button> </p> </p> <สคริปต์> // รับ Dom Node const name = document.getElementById ('ชื่อ') const btn = document.getElementById ('btn') // กำหนดฟังก์ชั่นที่ปรับเปลี่ยนค่า const updatedom = (el, value) => { el.innerhtml = ค่า - const person = proxy ใหม่ ({ ชื่อ: 'หนึ่งชามโจ๊ก' - SET (Target, Propkey, Value) { // หากค่าภายในการเปลี่ยนแปลงโทรไปที่การอัปเดตของเรา อัปเดต (ชื่อ, ค่า) เป้าหมาย [propkey] = ค่า กลับเป็นจริง - - name.innerhtml = person.name // คลิกปุ่มเพื่อทริกเกอร์การดำเนินการแก้ไข btn.addeventListener ('คลิก', () => { person.name === 'ชามโจว'? (person.name = 'ชามโจ๊ก'): (person.name = 'One Bowl Zhou') - </สคริปต์> </ร่างกาย> </html>
รหัสด้านบนใช้วิธีการตั้งค่าสำหรับการเชื่อมโยงข้อมูล
Reflect handlers
วัตถุที่จัดทำโดย ECMASCRIPT2015
การไตร่ตรองไม่ใช่ตัวสร้างซึ่งหมายความว่าไม่สามารถสร้างอินสแตนซ์ได้
การดำเนินการสกัดกั้นแต่ละครั้งในวัตถุ Proxy
(ตัวอย่างเช่น: get
, delete
ฯลฯ ) เรียกใช้วิธี Reflect
กลับภายใน วิธีการคงที่ที่มันมีให้สอดคล้องกับชื่อวิธีการใน handlers
ในพร็อกซี
ดังต่อไปนี้:
ฟังก์ชั่น | การโทรเริ่มต้น |
---|---|
สะท้อน () | ได้รับค่าของคุณสมบัติบนวัตถุ |
สะท้อน | |
ถึง | Object |
() | พิจารณาว่าวัตถุมีคุณสมบัติบางอย่าง |
สะท้อนให้เห็นหรือไม่ deleteProperty () | ลบคุณสมบัติบน |
วัตถุ | สะท้อน |
ให้ | เห็น |
Reflect.isextensible () | กำหนดว่าวัตถุนั้นสามารถขยายได้หรือไม่ (นั่นคือไม่ว่าจะสามารถเพิ่มคุณสมบัติใหม่ได้หรือไม่ |
) | สะท้อน |
ให้ | เห็น |
Reflect.defineProperty | ( |
) | กำหนดหรือปรับเปลี่ยนคุณสมบัติของวัตถุ |
สะท้อนให้เห็นถึง ownkeys () | ส่งคืนอาร์เรย์ที่ประกอบด้วยคีย์คุณสมบัติของวัตถุเป้าหมายเอง |
ส่ง | |
ผ่าน | เป็น |
Map
WeakSet
Set
WeakMap
Set
WeakSet
WeakSet
คล้าย Set
อาร์เรย์
ตั้งวัตถุในการ
พัฒนาจริงคือการใช้ข้อมูลซ้ำซ้อน
const set = ชุดใหม่ (arr) // วัตถุที่ตั้งไว้สามารถใช้ ... เพื่อขยายรายการทั้งหมด console.log ([... set]) // [1, 2, 3, 4, 5]
Map
และ WeakMap
คล้ายกับวัตถุและเก็บไว้ใน รูปแบบของคู่คีย์-ค่าใช่ความแตกต่างระหว่างทั้งสองคือคู่คีย์-ค่าของ Map
สามารถกำหนดได้ในขณะที่ปุ่มของ WeakMap
จะต้องอ้างอิงถึงวัตถุและค่าสามารถเป็นประเภทใดก็ได้ES2016 เผยแพร่คุณสมบัติใหม่ไม่กี่ตัวโดยส่วนใหญ่เป็นคุณสมบัติใหม่สองอย่างดังที่แสดงในรูปด้านล่าง:
ให้
บริการพลังงานซึ่งมีฟังก์ชั่นเดียวกับMath.pow
**
)
(2, 10)) // true
เพิ่มวิธี includes()
ไปยังต้นแบบอาร์เรย์ใน
ES2016 รหัสตัวอย่างมีดังนี้:
const arr = [1, 2, 3, 4, 5, nan] console.log (arr.indexof (nan)) // -1 console.log (arr.includes (nan)) // จริง
เป็นที่น่าสังเกตว่า NaN
และ NaN
, +0
และ -0
มีค่าเท่ากันเมื่อใช้ includes()
Promise จะแก้ปัญหาของการโทรกลับนรกหากมีสายโซ่มากเกินไปความสามารถในการอ่านจะยังคงแย่ลง
คำสัญญาถูกเขียนดังนี้:
; (ฟังก์ชั่น () { ฟังก์ชั่นสัญญา (v) { คืนสัญญาใหม่ ((แก้ไข, ปฏิเสธ) => { แก้ไข (v) - - const p = สัญญา (1) P.then (res => { Return Promise (res) }). จากนั้น (res => { console.log (res) - }) ()
หากสัญญาต่อไปขึ้นอยู่กับการเรียกร้องก่อนหน้านี้การโทรนี้จะยาว
มาก ฟังก์ชั่นสัญญา (v) { คืนสัญญาใหม่ ((แก้ไข, ปฏิเสธ) => { แก้ไข (v) - - const r1 = รอสัญญา (1) const r2 = รอสัญญา (R1) const res = รอสัญญา (R2) console.log (res) }) ()
อย่างที่คุณเห็นเราสามารถใช้ async/รอน้ำตาลวากยสัมพันธ์เพื่อเขียนคำสัญญาเป็นวิธีการเขียนแบบแบน
ES2017
วัตถุอะตอม new
ขยายสำหรับวัตถุใน ES2017 ดังต่อไปนี้:
Object.entries()
Object.values()
อาร์เรย์ของค่าคุณสมบัติที่สามารถระบุได้ทั้งหมดของวัตถุที่กำหนดเอง;Object.getOwnPropertyDescriptors()
ใน ES2017 ช่วยให้เราสามารถเพิ่มเครื่องหมายจุลภาคในตอนท้ายของรายการพารามิเตอร์ฟังก์ชั่น ต้องเปลี่ยนรหัสสองบรรทัด
รหัสตัวอย่างมีดังนี้:
ฟังก์ชั่นสนุก ( aaaaa BBBBB CCCCC ) {}
หากมีเครื่องหมายจุลภาคต่อท้ายคุณจะต้องเพิ่มบรรทัดในตอนท้าย สิ่งนี้เปลี่ยนสองบรรทัดในการจัดการเวอร์ชันไม่ใช่หนึ่งเดียว
สำหรับ
สตริงใน ES2017 ซึ่งคือ:
PADSTART ():
padStart()
ช่องว่างที่จุดpadEnd()
ต้นของสตริง;= 'ชามโจว' console.log (str.padstart (10)) /* ชาม Zhou* / / console.log (str.padend (10)) /* yiwan zhou* /
มีใหม่ for await...of
คำสั่งใน ES2018 ซึ่งสามารถใช้ในการสำรวจวัตถุที่ทำซ้ำแบบอะซิงโคร
นั
ส [symbol.asynciterator] () { กลับ { ฉัน: 0, ต่อไป() { if (this.i <3) { return promise.resolve ({value: this.i ++, ทำ: false}) - return promise.resolve ({ทำ: จริง}) - - - - ; (async function () { สำหรับการรอคอย (จำนวนของ asynciterable) { console.log (num) - - // 0 // 1 // 2
ใน ES2018 ส่วนขยายต่อไปนี้ถูกสร้างขึ้นเพื่อการแสดงออกปกติ:
การตั้งชื่อกลุ่มนิพจน์ทั่วไป:
ก่อน ES2018 เราไม่สามารถตั้งชื่อกลุ่มในการแสดงออกปกติ การอ้างอิง
รหัสตัวอย่างมีดังนี้:
const re_date = /(? <ปี> d {4})-(? <mony> d {2})-(? <day> d {2}) / const matchobj = re_date.exec ('2022-02-22') Const Year = Matchobj.groups.year // 2022 เดือน const = matchobj.groups.month // 02 const day = matchobj.groups.day // 22
S Modifier/Dotall Mode: ตัวดัดแปลง S ใหม่ s
ให้ใช้งาน .
.
การยืนยันย้อนกลับ: มีเพียงการยืนยันล่วงหน้าก่อน ES2018 ในขณะที่ การยืนยันย้อนกลับ และ การยืนยันเชิงลบย้อนกลับ ถูกเพิ่มเข้ามาใน ES2018
มี
การเพิ่มอาร์เรย์ใหม่ใน ES2015
const a = {อายุ: 18} const person = {... n, ... a} // ผสาน Object Console.log (บุคคล) // {ชื่อ: 'A Bowl of Zhou', อายุ: 18}
วิธีการ finally()
จะส่งคืนวัตถุ Promise
การเปลี่ยนแปลงไม่ว่าจะเป็นการ rejected
หรือ fulfilled
การโทรกลับ finally()
จะถูกดำเนินการ
รหัสตัวอย่างมีดังนี้:
Fetch (URL) . แล้ว (res => { console.log (res) - .Catch (error => { console.log (ข้อผิดพลาด) - .Finally (() => { console.log ('end') })
ได้ปรับเนื้อหาสองอย่างต่อไปนี้ใน ES2019:
function.prototype.toString(
try...catch
catch
Function.prototype.toString()
ชั่นที่ส่งคืนมีความคิดเห็นและช่องว่าง;{ console.log ('ชามสัปดาห์') } จับ { console.error ('ชามสัปดาห์') }
String.prototype.trimEnd
trimStart
String.prototype.trimLeft
String.prototype.trimStart
เพื่อลบช่องว่างที่ด้านซ้ายของสตริง;Array.prototype.flat()
ขวา
String.prototype.trimEnd
trimEnd
String.prototype.trimRight
const arr = [0, 1, 2, [3, 4]] console.log (arr.flat ()) // [0, 1, 2, 3, 4]
Array.prototype.flatMap()
: วิธีการนี้แผนที่และแบนอาร์เรย์และส่งคืนอาร์เรย์ใหม่ ขยาย)(
)
Object.entries()
Object.fromEntries()
แปลงรายการคู่คีย์-ค่าเป็นวัตถุ
= { ชื่อ: 'ชามโจว' อายุ: '18', - const e = object.entries (บุคคล) const p = object.fromentries (e) console.log (p) // {ชื่อ: 'A Bowl of Week', อายุ: '18'}
description
เป็นคุณสมบัติแบบอ่านอย่างเดียวที่ส่งคืนสตริงคำอธิบายเพิ่มเติมเมื่อสร้างวัตถุสัญลักษณ์
Modularization
เพิ่มการนำเข้าแบบไดนามิกใน
ES2020 ซึ่งหมายความว่าโมดูลจะถูกโหลดเมื่อเราต้องการ
จากนั้น (โมดูล => { // ทำอะไรกับโมดูล })
การนำเข้าแบบไดนามิกใช้วิธี import()
ซึ่งส่งคืนสัญญา
ใน ES2020 วัตถุ meta
จะถูกเพิ่มเข้าไปใน import
ซึ่งจะเปิดเผยวัตถุของคุณลักษณะเมตาดาต้าเฉพาะบริบทไปยังโมดูล JavaScript
BigInt
แก้ปัญหาที่จำนวนสูงสุดที่อนุญาตใน JavaScript คือ 2**53-1
const thebiggestint = 9007199254740991N; const นอกจากนี้ HAUGE = BIGINT (9007199254740991); // ↪ 9007199254740991N const hugestring = bigint ("9007199254740991"); // ↪ 9007199254740991N const ใหญ่ hex = bigint ("0x1fffffffffffff"); // ↪ 9007199254740991N const bigbin = bigint ("0b11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 // ↪ 9007199254740991N
แนะนำ
GlobalThis
Window
Global
globalThis
แนะนำวัตถุระดับโลก
var getGlobal = function () { if (typeof self! == 'undefined') {return self; if (typeof window! == 'undefined') {return window;} if (typeof global! == 'undefined') {return global; โยนข้อผิดพลาดใหม่ ('ไม่สามารถค้นหาวัตถุทั่วโลก'); - var globals = getGlobal (); if (typeof globals.settimeout! == 'function') { // ไม่มีการตั้งถิ่นฐานในสภาพแวดล้อมนี้! }
// หลังจากถ้า (typeof globalthis.settimeout! == 'function') { // ไม่มีการตั้งถิ่นฐานในสภาพแวดล้อมนี้! }
ผู้ดำเนินการรวมตัวกันของค่า NULL แสดงด้วยเครื่องหมายคำถามสองข้อ其计算规则为,只要左运算元为null
或者undefined
,则返回右运算元,否则返回左运算元。而逻辑或运算符只有左运算元转换为boolean
类型后为false
,就返回右运算元。
示例代码如下:
console.log(null ?? 10) // 10 console.log(undefined ?? 10) // 10 console.log(false ?? 10) // false
该运算符用于为没有值的变量赋值很有用,例如:如果这个数没有值,就为其赋值,否则不赋值,
示例代码如下:
var value // 如果value的值不为null 或者undefined 为其赋值10 value = value ?? 10 console.log(value) // 10
值得注意的是空值合并运算符与逻辑与和逻辑或不能同时使用,否则会抛出异常,解决方案是通过使用
()
来表明优先级
可选链操作符用于读取某对象链下深处属性的值,使用这个操作符不必验证对象下的每个属性必须存在,例如我们想要访问Aab
这个属性时,我们首先需要确保A
存在,然后需要确保Aa
存在,才可以访问Aab
这个属性,不然就会报错。
使用可选链操作符就不会出现这样的问题,当我们访问某个属性时,只要有一处不存在,就会返回undefind
,不会报错。
var A = {} // console.log(Aab) // 报错console.log(Aa?.b) // undefined
可选链操作符也可用于对象下方法的调用,示例代码如下:
var obj = {} // 如果存在obj.fun() 这个方法,下面则会直接调用,如果不存在则会返回undefined obj.fun?.A()
Promise.allSettled()
方法返回一个在所有给定的promise 都已经resolved或rejected后的promise,并带有一个对象数组,每个对象表示对应的promise 结果。
replaceAll()
方法返回一个新字符串,新字符串的内容是经过替换的,实例代码如下:
const str = '一碗粥' const newStr = str.replaceAll('粥', '周') console.log(newStr) // 一碗周
严格意义上讲数值分隔符( _
)并不属于一个运算符,其作用就是使数字更加利于阅读,例如下面的代码
console.log(1_0000_0000) // 100000000
这个符号仅仅起到了便于阅读的目的,有与没有的结果并不影响,看下面的代码
1_1 === 11 // true
ES2021中新增的WeakRef
对象允许您保留对另一个对象的弱引用,而不会阻止被弱引用对象被GC回收。
ES2021中新增的Promise.any()
方法,它接受的参数和与promise.all()
是一致的,唯一不同的是, Promise.any()
方法接受的可迭代对象中没有一个promise成功(即所有的promises都失败/拒绝),就返回一个失败的promise和AggregateError类型的实例。
ES2021中新增了一些赋值运算符,具体如下:
&&=
||=
??=
实际上它与普通的赋值运算符一致,示例代码如下:
const [f1, f2, f3] = [true, false] f1 &&= '一碗周' // 等同于str = str && '一碗周' f2 ||= '一碗周' // 等同于str = str || '一碗周' f3 ??= '一碗周' // 等同于str = str ?? '一碗周'
在ES2022中允许我们并不在constructor
中定义类的成员,示例代码如下:
class C { myName = '一碗周' - /* 两者是一致的*/ class C { ตัวสร้าง () { myName = '一碗周' - }
如果成员只声明不初始化它的默认值是undefined。
在ES2022中允许我们使用#
开头命名的变量作为类的私有成员,
示例代码如下:
class C { #myName = '一碗周' - const c = new C() console.log(#myName) // Private field '#myName' must be declared in an enclosing class
在ES2022中新增了允许在顶层使用await
,在顶层可以不适用async
函数进行包裹,示例代码如下:
import { AsyncFun } from 'module' await AsyncFun() console.log(123)
Object.hasOwn()
方法用于判断某个对象上是否具有某个属性,示例代码如下:
const person = { name: '一碗周', อายุ: 18, - console.log(Object.hasOwn(person, 'name')) // true console.log(Object.hasOwn(person, 'sex')) // false
ES2022中新增的at()
方法,它的作用是获取数组中的某个成员,它的参数是数组的索引,与直接使用索引的方式不同,它允许我们传递负值,等同于从后面倒数,示例代码如下:
const arr = [1, 2, 3, 4, 5, 6] console.log(arr.at(-1)) // 6 // 等同于arr[arr.length - 1]
正则表达式增加了一个/d
修饰符,当使用正则表达式的exec()
方法时,如果有/d
修饰符,那么结果会多返回一个indices属性,用来表示匹配的结果的在原字符串中的起始index值。
示例代码如下:
const str = 'JavaScript' const r = /a/d const m = r.exec(str) console.log(m.indices[0]) //[ 1, 2 ]
这篇文章到这就结束了,这篇文章中整理了ES2015到ES2022的新特性,有可能会有疏漏,望谅解。
脑图如下: