ล่าสุดการพัฒนาเว็บบทเรียน
×

JS เกี่ยวกับการสอน

JS บ้าน JS บทนำ JS สถานที่ที่จะ JS ส่งออก JS วากยสัมพันธ์ JS งบ JS ความคิดเห็น JS ตัวแปร JS ผู้ประกอบการ JS คณิตศาสตร์ JS การมอบหมาย JS ชนิดข้อมูล JS ฟังก์ชั่น JS วัตถุ JS ขอบเขต JS เหตุการณ์ JS เงื่อนไข JS วิธีสตริง JS เบอร์ JS วิธีการจำนวน JS คณิตศาสตร์ JS วันที่ JS รูปแบบวันที่ JS วันวิธีการ JS แถว JS วิธีการอาร์เรย์ JS booleans JS เปรียบเทียบ JS เงื่อนไข JS สวิตซ์ JS ห่วง For JS ในขณะที่ห่วง JS หยุด JS ประเภทการแปลง JS นิพจน์ทั่วไป JS ข้อผิดพลาด JS แก้จุดบกพร่อง JS hoisting JS โหมดที่เข้มงวด JS คู่มือสไตล์ JS ปฏิบัติที่ดีที่สุด JS ข้อผิดพลาด JS ประสิทธิภาพ JS คำสงวน JS JSON

JS ฟอร์ม

แบบฟอร์มการตรวจสอบ รูปแบบ API

JS วัตถุ

นิยามวัตถุ คุณสมบัติของวัตถุ วิธีการของวัตถุ ต้นแบบวัตถุ

JS ฟังก์ชั่น

นิยามฟังก์ชั่น ค่าฟังก์ชัน ฟังก์ชั่นการภาวนา ปิดฟังก์ชั่น

JS HTML DOM

DOM แนะนำ DOM วิธีการ DOM เอกสาร DOM องค์ประกอบ DOM HTML DOM CSS DOM ภาพเคลื่อนไหว DOM เหตุการณ์ DOM EventListener DOM การเดินเรือ DOM โหนด DOM Nodelist

JS เบราว์เซอร์ BOM

JS Window JS Screen JS Location JS History JS Navigator JS Popup Alert JS Timing JS Cookies

JS ตัวอย่าง

JS ตัวอย่าง JS HTML DOM JS HTML อินพุต JS HTML วัตถุ JS HTML เหตุการณ์ JS เบราว์เซอร์ JS ทดสอบ JS สรุป

JS คู่มืออ้างอิง

JavaScript วัตถุ HTML DOM วัตถุ


 

JavaScriptใช้อย่างเข้มงวด


"use strict"; กำหนดว่ารหัส JavaScript ควรจะดำเนินการในโหมด "เข้มงวด"


"use strict" Directive

"use strict" สั่งใหม่ใน JavaScript 1.8.5 (ECMAScript version 5)

มันไม่ได้เป็นคำสั่ง แต่การแสดงออกที่แท้จริงโดยไม่สนใจเวอร์ชันก่อนหน้าของ JavaScript

วัตถุประสงค์ของการ "use strict" คือการแสดงให้เห็นว่ารหัสควรจะดำเนินการในโหมด "เข้มงวด"

ด้วยโหมดเข้มงวดคุณจะไม่สามารถยกตัวอย่างเช่นการใช้ตัวแปรที่ไม่ได้ประกาศ

โหมดการเข้มงวดการสนับสนุนใน:
เช่นจากรุ่น 10 จาก Firefox 4 รุ่น
Chrome จากรุ่น 13 Safari จากรุ่น 5.1
Opera จากรุ่น 12


ประกาศอย่างเคร่งครัดโหมด

โหมดเข้มงวดมีการประกาศโดยการเพิ่ม "use strict"; จุดเริ่มต้นของสคริปต์หรือฟังก์ชั่น

ประกาศที่จุดเริ่มต้นของสคริปต์ก็มีขอบเขตทั่วโลก (รหัสทั้งหมดในสคริปต์ที่จะดำเนินการอย่างเข้มงวดในโหมด):

ตัวอย่าง

"use strict";
x = 3.14;       // This will cause an error (x is not defined)
ลองตัวเอง»

ตัวอย่าง

"use strict";
myFunction();

function myFunction() {
    y = 3.14;   // This will also cause an error (y is not defined)
}
ลองตัวเอง»

ประกาศภายในฟังก์ชันก็มีขอบเขตในท้องถิ่น (รหัสเฉพาะภายในฟังก์ชันอยู่ในโหมดที่เข้มงวด):

x = 3.14;       // This will not cause an error.
myFunction();

function myFunction() {
   "use strict";
    y = 3.14;   // This will cause an error (y is not defined)
}
ลองตัวเอง»

"use strict"; ไวยากรณ์

ไวยากรณ์สำหรับการประกาศโหมดเข้มงวดถูกออกแบบมาให้เข้ากันได้กับรุ่นเก่าของ JavaScript

รวบรวมตัวเลขที่แท้จริง (4 + 5;) หรือสตริงตัวอักษร ("John Doe";) ในโปรแกรมจาวาสคริปต์ไม่มีผลข้างเคียง มันก็จะรวบรวมให้กับตัวแปรที่ไม่ใช่ที่มีอยู่และตาย

ดังนั้น "use strict" ; เพียง แต่มีความสำคัญกับคอมไพเลอร์ใหม่ที่ "เข้าใจ" ความหมายของมัน


ทำไมโหมดเข้มงวด?

โหมดเข้มงวดทำให้ง่ายต่อการเขียน "ปลอดภัย" JavaScript

โหมดเข้มงวดก่อนหน้านี้ได้รับการยอมรับการเปลี่ยนแปลงไวยากรณ์ "ไม่ดี" เป็นข้อผิดพลาดจริง

ตัวอย่างเช่นในปกติ JavaScript, mistyping ชื่อตัวแปรสร้างตัวแปรใหม่ทั่วโลก ในโหมดที่เข้มงวดนี้จะโยนความผิดพลาดทำให้มันเป็นไปไม่ได้ตั้งใจสร้างตัวแปรทั่วโลก

ปกติ JavaScript, นักพัฒนาจะไม่ได้รับการตอบรับข้อผิดพลาดใด ๆ การกำหนดค่าคุณสมบัติไม่สามารถเขียนได้

ในโหมดที่เข้มงวดมอบหมายใด ๆ ไปยังสถานที่ให้บริการที่ไม่สามารถเขียนเป็นคุณสมบัติทะเยอทะยานอย่างเดียวที่ไม่มีอยู่คุณสมบัติตัวแปรไม่ใช่ที่มีอยู่หรือไม่มีอยู่วัตถุจะโยนความผิดพลาด


ไม่ได้รับอนุญาตในโหมดเข้มงวด

ใช้ตัวแปรโดยไม่ต้องประกาศว่าจะไม่ได้รับอนุญาต:

"use strict";
x = 3.14;                // This will cause an error (x is not defined)

ลองตัวเอง»

วัตถุที่เป็นตัวแปรมากเกินไป

การใช้วัตถุโดยไม่ต้องประกาศว่าจะไม่ได้รับอนุญาต:

"use strict";
x = {p1:10, p2:20};      // This will cause an error (x is not defined)

ลองตัวเอง»

การลบตัวแปร (หรือวัตถุ) ไม่ได้รับอนุญาต

"use strict";
var 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";
var x = 010;             // This will cause an error

ลองตัวเอง»

หนีตัวอักษรไม่ได้รับอนุญาต:

"use strict";
var x = \010;            // This will cause an error

ลองตัวเอง»

การเขียนไปยังสถานที่ให้บริการอ่านอย่างเดียวไม่ได้รับอนุญาต:

"use strict";
var obj = {};
Object.defineProperty(obj, "x", {value:0, writable:false});

obj.x = 3.14;            // This will cause an error

ลองตัวเอง»

การเขียนไปยังที่พักได้รับเพียงไม่ได้รับอนุญาต:

"use strict";
var obj = {get x() {return 0} };

obj.x = 3.14;            // This will cause an error

ลองตัวเอง»

การลบคุณสมบัติ undeletable ไม่ได้รับอนุญาต:

"use strict";
delete Object.prototype; // This will cause an error

ลองตัวเอง»

สตริง "EVAL" ไม่สามารถนำมาใช้เป็นตัวแปร:

"use strict";
var eval = 3.14;         // This will cause an error

ลองตัวเอง»

สตริง "ข้อโต้แย้ง" ไม่สามารถนำมาใช้เป็นตัวแปร:

"use strict";
var arguments = 3.14;    // This will cause an error

ลองตัวเอง»

ที่มีคำสั่งไม่อนุญาตให้ใช้:

"use strict";
with (Math){x = cos(2)}; // This will cause an error

ลองตัวเอง»

สำหรับเหตุผลด้านความปลอดภัย eval() ไม่ได้รับอนุญาตให้สร้างตัวแปรในขอบเขตจากการที่มันถูกเรียกว่า:

"use strict";
eval ("var x = 2");
alert (x);               // This will cause an error

ลองตัวเอง»

ในการเรียกฟังก์ชันเช่น f() ค่านี้คือวัตถุทั่วโลก ในโหมดที่เข้มงวดก็คือตอนนี้ไม่ได้กำหนด


พิสูจน์ได้ในอนาคต!

คำหลักที่สงวนไว้ในอนาคตไม่ได้รับอนุญาตในโหมดที่เข้มงวด เหล่านี้คือ:

  • implements
  • interface
  • let
  • package
  • private
  • protected
  • public
  • static
  • yield
"use strict";
var public = 1500;      // This will cause an error

ลองตัวเอง»


ระวัง!

ระวัง!

"use strict" สั่งได้รับการยอมรับเพียงจุดเริ่มต้นของสคริปต์หรือฟังก์ชั่น