วันที่ 5 ของการเรียนรู้ JavaScript — เหตุการณ์สำคัญ 1
บทความนี้เขียนขึ้นเล็กน้อยตามบทช่วยสอน Leanpub - การทำความเข้าใจ ES6 สำหรับคำอธิบายและตัวอย่างเพิ่มเติม โปรดเยี่ยมชมเว็บไซต์
1. Block Bindings: แทนที่ IIFE โดยใช้ 'let'
เราสามารถแทนที่ IIFE และรับผลลัพธ์เดียวกันโดยการประกาศ letภายในลูป ในการโยงบล็อก เพื่อให้โค้ดสะอาดตายิ่งขึ้น เราสามารถใช้ letแทน var ได้ต่างจาก IIFE สิ่งที่ IIFE ทำคือการประกาศตัวแปรลูปเป็น var สำหรับฟังก์ชันภายในลูปสามารถรับและระงับการเชื่อมโยงใหม่ได้ในแต่ละครั้ง การประกาศ letfor ตัวแปรลูปจะทำให้งานสะดวกและง่ายขึ้น
ตัวอย่าง:
var nums = [];
สำหรับ (ให้ i = 0; i ‹ 10; i++) {
จำนวน .push (ฟังก์ชั่น () {
console.log(i);
});
}
nums.forEach (ฟังก์ชัน (หมายเลข) {
หมายเลข(); // ส่งออก 0 จากนั้น 1 และ 2 จนถึง 9
})
2. ประกาศระดับบล็อก: โซนตายชั่วคราว
การยกช่วยให้เราสามารถเข้าถึงตัวแปรก่อนที่จะประกาศ แต่น่าเสียดายที่สามารถใช้ได้เฉพาะกับตัวแปรที่ประกาศเป็น var เท่านั้น สำหรับตัวแปรที่ประกาศด้วย let หรือ constการยกเป็นสิ่งต้องห้ามและจะทำให้เกิดข้อผิดพลาด
เนื่องจากกลไกเบราว์เซอร์ JS วางการประกาศไว้ใน Temporal Dead Zone หรือ TDZ (สำหรับ let และ const) หากเราต้องการเข้าถึงตัวแปรใน TDZ มันจะเกิดข้อผิดพลาดรันไทม์ เราสามารถปรับมันให้เหมาะสมได้ด้วยการดำเนินการง่ายๆ โดยใช้ typeOf()
ตัวอย่าง:
if ( — -) {
console.log (ประเภทของสี); // อ้างอิงผิดพลาด!
ให้สี = “สีแดง”;
}
3. ค่าพารามิเตอร์เริ่มต้นของ ES6 ส่งผลต่อออบเจ็กต์อาร์กิวเมนต์
แม้ว่าจะเป็นไปไม่ได้ใน ES5 ที่จะได้รับผลลัพธ์ อาร์กิวเมนต์ ที่คาดหวังไว้โดยไม่ต้องใช้โหมด เข้มงวด แต่ ES6 มอบวิธีแก้ปัญหาที่มหัศจรรย์เพียงแค่ใช้พารามิเตอร์เริ่มต้นในฟังก์ชัน พารามิเตอร์เริ่มต้นแยกวัตถุ อาร์กิวเมนต์ ออกจากพารามิเตอร์ที่มีชื่อ
ตัวอย่าง:
ทดสอบฟังก์ชัน (หนึ่ง สอง = “b”) {
console.log(อาร์กิวเมนต์.ความยาว); // 1
console.log (หนึ่ง === อาร์กิวเมนต์ [0]); // จริง
console.log (สอง === อาร์กิวเมนต์ [1]); // เท็จ อาร์กิวเมนต์[1] ไม่ได้กำหนดไว้
แรก = “ค”;
วินาที = “ง”
console.log (แรก === อาร์กิวเมนต์ [0]); // เท็จ
console.log (วินาที === อาร์กิวเมนต์ [1]); // เท็จ
}
ทดสอบ("ก");
4. ฟังก์ชัน: การแทนที่ Apply() ด้วย The Spread Operator
เมื่อเราต้องการค้นหาค่าจากอาร์เรย์ขององค์ประกอบหลายรายการ การค้นหาผ่านอาร์เรย์ใน ES5 ค่อนข้างสับสน วิธีแก้ไขอย่างหนึ่งคือการใช้วิธีการ apply() แต่มันสร้างไวยากรณ์เพิ่มเติมและทำให้สาระสำคัญดั้งเดิมของโค้ดเสียไป ใน ES6 เราสามารถทำได้โดยใช้ ตัวดำเนินการสเปรด (…)
ตัวอย่าง-1 (ES5):
ให้ค่า = [170, 30, 23, 100];
console.log(Math.max.apply(คณิตศาสตร์, ค่า)); // 170
ตัวอย่าง-2 (ES6):
ให้ค่า = [170, 30, 23, 100];
console.log(Math.max(...ค่า)); // 170
5. ฟังก์ชั่นระดับบล็อก ES6 ในโหมดไม่เข้มงวด
ES6 ยังรองรับการประกาศอีกด้วย แต่ในโหมดที่ไม่เข้มงวด การประกาศจะถูกยกขึ้นสู่สภาพแวดล้อมส่วนกลาง แทนที่จะเป็นระดับบนสุดของระดับบล็อก
ตัวอย่าง:
ถ้าเป็นจริง) {
console.log (ประเภทของการทดสอบ); // "การทำงาน"
ทดสอบฟังก์ชัน() {
// โค้ดของฟังก์ชัน
}
ทดสอบ();
}
console.log (ประเภทของการทดสอบ); // "การทำงาน"
6. ฟังก์ชั่นลูกศรและอาร์เรย์
ES6 มีฟีเจอร์อันทรงพลังที่เรียกว่าฟังก์ชันลูกศร (=›) มันมาแทนที่บล็อกฟังก์ชั่นแบบยาวแบบดั้งเดิมและทำให้โค้ดสะอาดขึ้น ในการประมวลผล องค์ประกอบอาร์เรย์ [.., .., ..] ด้วยความช่วยเหลือของ ฟังก์ชันลูกศร(=›) จะง่ายกว่าการประกาศฟังก์ชันแบบเดิมมาก
ตัวอย่าง-1 (ฟังก์ชันดั้งเดิม):
ให้ค่า = [170, 30, 23, 100];
ผลลัพธ์ var =value.sort(function(a, b) {
ส่งคืน a - b;
});
ผลลัพธ์ // [23, 30, 100, 170]
ตัวอย่าง-2 (ฟังก์ชันลูกศร):
ให้ค่า = [170, 30, 23, 100];
ผลลัพธ์ var =values.sort((a, b) =› a - b);
ผลลัพธ์ // [23, 30, 100, 170]
7. การกำหนดการทำลายล้าง การแลกเปลี่ยนมูลค่า
การทำลายล้างเป็นเทคนิคในการทำลายโครงสร้างข้อมูลที่จำเป็น การใช้การทำลายโครงสร้างอาร์เรย์ การสลับค่าของอาร์เรย์จะง่ายกว่ามากโดยไม่มีตัวแปรตัวที่สาม เราสามารถทำลายโครงสร้างอาร์เรย์ได้โดยใช้ วงเล็บ []ที่ด้านซ้ายของ ตัวดำเนินการกำหนด (=) และตัวแปรอาร์เรย์ทางด้านขวา
ตัวอย่าง-1 (ใช้ตัวแปรที่สาม - ES5):
ให้ a = 1, b = 2, อุณหภูมิ;
อุณหภูมิ = เป็น;
a = b;
ข = อุณหภูมิ;
console.log(ก); // 2
console.log(ข); // 1
ตัวอย่าง-2 (การใช้การทำลายโครงสร้างอาร์เรย์ - ES6):
ให้ a = 1, b = 2;
[ a, b ] = [ b, a ];
console.log(ก); // 2
console.log(ข); // 1
8. '... รายการที่เหลือ' ทำให้การโคลนอาเรย์เป็นเรื่องง่าย
ไม่น่าเชื่อว่าการโคลนองค์ประกอบอาร์เรย์จะง่ายกว่าที่เราคิดใน ES6 ก่อนที่นักพัฒนา ES6 จะใช้วิธี concat() เพื่อโคลนองค์ประกอบอาร์เรย์ แต่จุดประสงค์ดั้งเดิมของฟังก์ชัน concat(),นั้นไม่ได้เป็นเช่นนั้นอย่างแน่นอน อาร์เรย์โคลน '... รายการที่เหลือ' มาถึงแล้ว เพียงกำหนดอาร์เรย์ให้กับตัวแปร [… rest items] จะเป็นการจำลองอาร์เรย์ทั้งหมดโดยไม่มีข้อผิดพลาด
ตัวอย่าง:
ให้ผลไม้= [ “มะม่วง”, “ส้ม”, “สับปะรด” ];
ให้ [ …clonedFruits ] = ผลไม้;
console.log(โคลนผลไม้); // [“มะม่วง”, “ส้ม”, “สับปะรด”]
9. คลาส: ES6 พลเมืองชั้นหนึ่ง
ฟังก์ชั่น First-Class Citizens หรือ First-Class ใน ES6 ทำให้ JavaScript มีเอกลักษณ์เฉพาะจากภาษาอื่นๆ คุณสมบัติพิเศษนี้ให้ค่าที่คาดหวังให้เป็น -
i) ส่งผ่านไปยังฟังก์ชัน
ii) ส่งคืนจากฟังก์ชันและ
iii) กำหนดให้กับตัวแปร
ตัวอย่าง:
การทดสอบฟังก์ชั่น (demoClass) {
กลับ demoClass ใหม่ ();
}
ให้ x = ทดสอบ (คลาส {
พูดอะไรสักอย่าง() {
console.log("อรุณสวัสดิ์!");
}
});
x.saySomething();
10. คลาส: คุณสมบัติตัวเข้าถึง
คุณสมบัติของคลาสควรถูกสร้างขึ้นภายในตัวสร้างของคลาสนั้นเสมอ ใน ES6 อนุญาตให้กำหนดคุณสมบัติตัวเข้าถึงภายในคลาสต้นแบบได้ คลาสใช้เมธอด getterและ setter เพื่อทำให้การเข้าถึงคุณสมบัติง่ายขึ้น
ตัวอย่าง:
วิธีการ Object.getOwnPropertyDescriptor() ส่งคืนตัวอธิบายคุณสมบัติสำหรับคุณสมบัติของตัวเอง (อ้างอิง: MDN)
คลาส CustomHTMLLElement {
ตัวสร้าง (องค์ประกอบ) {
นี้องค์ประกอบ = องค์ประกอบ;
}
รับ html() {
ส่งคืน this.element.innerHTML;
}
ตั้งค่า html (ค่า) {
this.element.innerHTML = ค่า;
}
}
var descriptor = Object.getOwnPropertyDescriptor (CustomHTMLElement.prototype, “html”);
console.log("get" ในตัวอธิบาย); // จริง
console.log("set" ในตัวอธิบาย); // จริง
console.log(คำอธิบาย.นับได้); // เท็จ