JavaScript ใช้เข้มงวด
"use strict";
กำหนดว่าโค้ด JavaScript ควรดำเนินการใน "โหมดเข้มงวด"
คำสั่ง "ใช้อย่างเข้มงวด"
คำ"use strict"
สั่งนั้นใหม่ใน ECMAScript เวอร์ชัน 5
ไม่ใช่คำสั่ง แต่เป็นนิพจน์ตามตัวอักษร ถูกละเว้นโดย JavaScript เวอร์ชันก่อนหน้า
จุดประสงค์"use strict"
คือเพื่อระบุว่าโค้ดควรรันใน "โหมดเข้มงวด"
ด้วยโหมดเข้มงวด คุณไม่สามารถใช้ตัวแปรที่ไม่ได้ประกาศได้ ตัวอย่างเช่น
เบราว์เซอร์ที่ทันสมัยทั้งหมดรองรับ "ใช้อย่างเข้มงวด" ยกเว้น Internet Explorer 9 และต่ำกว่า:
Directive | |||||
---|---|---|---|---|---|
"use strict" | 13.0 | 10.0 | 4.0 | 6.0 | 12.1 |
ตัวเลขในตารางระบุเบราว์เซอร์รุ่นแรกที่สนับสนุนคำสั่งอย่างสมบูรณ์
คุณสามารถใช้โหมดเข้มงวดได้ในทุกโปรแกรมของคุณ ช่วยให้คุณเขียนโค้ดที่สะอาดขึ้น เช่น ป้องกันไม่ให้คุณใช้ตัวแปรที่ไม่ได้ประกาศ
"use strict"
เป็นเพียงสตริง ดังนั้น IE 9 จะไม่แสดงข้อผิดพลาดแม้ว่าจะไม่เข้าใจก็ตาม
ประกาศโหมดเข้มงวด
โหมดเข้มงวดถูกประกาศโดยเพิ่ม"ใช้เข้มงวด"; ที่จุดเริ่มต้นของสคริปต์หรือฟังก์ชัน
ประกาศเมื่อเริ่มต้นสคริปต์ มีขอบเขตทั่วโลก (โค้ดทั้งหมดในสคริปต์จะดำเนินการในโหมดเข้มงวด):
ตัวอย่าง
"use strict";
x = 3.14; // This will cause an error
because x is not declared
ตัวอย่าง
"use strict";
myFunction();
function myFunction() {
y = 3.14; // This will also cause an error
because y is not declared
}
ประกาศภายในฟังก์ชัน มีขอบเขตภายใน (เฉพาะโค้ดภายในฟังก์ชันเท่านั้นที่อยู่ในโหมดเข้มงวด):
x = 3.14; // This will not cause an error.
myFunction();
function
myFunction() {
"use strict";
y = 3.14; // This will cause an error
}
"ใช้อย่างเข้มงวด"; ไวยากรณ์
ไวยากรณ์สำหรับการประกาศโหมดเข้มงวดได้รับการออกแบบมาให้เข้ากันได้กับ JavaScript เวอร์ชันเก่า
การรวบรวมตัวเลขตามตัวอักษร (4 + 5;) หรือตัวอักษรสตริง ("John Doe";) ในโปรแกรม JavaScript ไม่มีผลข้างเคียง มันเพียงคอมไพล์เป็นตัวแปรที่ไม่มีอยู่และตาย
ดังนั้น"use strict";
เฉพาะผู้คอมไพเลอร์ใหม่ที่ "เข้าใจ" ความหมายของมันเท่านั้น
ทำไมต้องโหมดเข้มงวด?
โหมดเข้มงวดช่วยให้เขียน JavaScript "ปลอดภัย" ได้ง่ายขึ้น
การเปลี่ยนแปลงโหมดเข้มงวดที่ยอมรับก่อนหน้านี้ "ไวยากรณ์ที่ไม่ถูกต้อง" เป็นข้อผิดพลาดที่แท้จริง
ตัวอย่างเช่น ใน JavaScript ปกติ การพิมพ์ชื่อตัวแปรผิดจะสร้างตัวแปรส่วนกลางใหม่ ในโหมดเข้มงวด การดำเนินการนี้จะทำให้เกิดข้อผิดพลาด ทำให้ไม่สามารถสร้างตัวแปรส่วนกลางได้โดยไม่ได้ตั้งใจ
ใน JavaScript ปกติ นักพัฒนาจะไม่ได้รับข้อเสนอแนะข้อผิดพลาดใดๆ ในการกำหนดค่าให้กับคุณสมบัติที่ไม่สามารถเขียนได้
ในโหมดเข้มงวด การมอบหมายคุณสมบัติที่ไม่สามารถเขียนได้, คุณสมบัติ getter-only, คุณสมบัติที่ไม่มีอยู่, ตัวแปรที่ไม่มีอยู่หรืออ็อบเจ็กต์ที่ไม่มีอยู่จะทำให้เกิดข้อผิดพลาด
ไม่อนุญาตในโหมดเข้มงวด
ไม่อนุญาตให้ใช้ตัวแปรโดยไม่ประกาศ:
"use strict";
x = 3.14; // This will cause an error
วัตถุก็เป็นตัวแปรเช่นกัน
ไม่อนุญาตให้ใช้วัตถุโดยไม่ประกาศ:
"use strict";
x = {p1:10, p2:20}; // This will cause an error
ไม่อนุญาตให้ลบตัวแปร (หรืออ็อบเจ็กต์)
"use strict";
let x = 3.14;
delete x; // This
will cause an error
ไม่อนุญาตให้ลบฟังก์ชัน
"use strict";
function x(p1, p2) {};
delete x;
// This will cause an error
ไม่อนุญาตให้ทำซ้ำชื่อพารามิเตอร์:
"use strict";
function x(p1, p1) {}; // This will cause an error
ไม่อนุญาตให้ใช้ตัวอักษรที่เป็นตัวเลขฐานแปด:
"use strict";
let x = 010; // This
will cause an error
ไม่อนุญาตให้ใช้อักขระหลีก Octal:
"use strict";
let x = "\010"; // This will cause an error
ไม่อนุญาตให้เขียนคุณสมบัติอ่านอย่างเดียว:
"use strict";
const obj = {};
Object.defineProperty(obj, "x", {value:0, writable:false});
obj.x = 3.14; // This
will cause an error
ไม่อนุญาตให้เขียนถึงสถานที่ให้บริการเฉพาะผู้รับเท่านั้น:
"use strict";
const obj = {get x()
{return 0} };
obj.x = 3.14; // This
will cause an error
ไม่อนุญาตให้ลบคุณสมบัติที่ไม่สามารถลบได้:
"use strict";
delete Object.prototype; // This will cause an error
คำeval
นี้ไม่สามารถใช้เป็นตัวแปรได้:
"use strict";
let eval = 3.14; // This will cause an error
คำarguments
นี้ไม่สามารถใช้เป็นตัวแปรได้:
"use strict";
let arguments = 3.14; // This will cause an error
with
ไม่อนุญาตให้ใช้คำสั่ง:
"use strict";
with (Math){x = cos(2)}; // This will cause an error
ด้วยเหตุผลด้านความปลอดภัยeval()
ไม่อนุญาตให้สร้างตัวแปรในขอบเขตที่เรียกใช้:
"use strict";
eval ("let x = 2");
alert (x); // This
will cause an error
คีย์เวิร์ดใน ฟังก์ชันthis
ทำงานแตกต่างกันในโหมดเข้มงวด
คำthis
หลักหมายถึงวัตถุที่เรียกว่าฟังก์ชัน
หากไม่ได้ระบุอ็อบเจ็กต์ ฟังก์ชันในโหมดเข้มงวดจะส่งคืนundefined
และฟังก์ชันในโหมดปกติจะส่งคืนอ็อบเจ็กต์ส่วนกลาง (หน้าต่าง):
"use strict";
function myFunction() {
alert(this); // will alert "undefined"
}
myFunction();
พิสูจน์ได้ในอนาคต!
คำหลักที่สงวนไว้สำหรับเวอร์ชัน JavaScript ในอนาคตไม่สามารถใช้เป็นชื่อตัวแปรในโหมดเข้มงวดได้
เหล่านี้คือ:
- ดำเนินการ
- อินเตอร์เฟซ
- อนุญาต
- บรรจุุภัณฑ์
- ส่วนตัว
- มีการป้องกัน
- สาธารณะ
- คงที่
- ผลผลิต
"use strict";
let public = 1500; // This will cause an error
ระวัง!
คำสั่ง "ใช้เข้มงวด" เป็นที่รู้จักเฉพาะที่จุดเริ่มต้นของสคริปต์หรือฟังก์ชัน