JS กวดวิชา

เจเอสโฮม JS Introduction JS Where To JS เอาท์พุต งบ JS JS ไวยากรณ์ JS ความคิดเห็น ตัวแปร JS เจเอส เลท JS Const JS Operators JS เลขคณิต JS Assignment ประเภทข้อมูล JS ฟังก์ชัน JS วัตถุ JS JS Events JS Strings JS String Methods JS String Search เทมเพลตสตริง JS JS Numbers JS Number Methods JS Arrays JS Array Methods JS Array Sort JS Array Iteration JS Array Const JS Dates รูปแบบวันที่ JS JS วันที่รับเมธอด JS Date Set Methods JS Math JS สุ่ม JS Booleans JS เปรียบเทียบ JS Conditions JS Switch JS ลูปสำหรับ JS Loop สำหรับ In JS วนสำหรับ Of JS วนรอบในขณะที่ JS Break JS Iterables JS ชุด JS Maps JS Typeof JS ประเภทการแปลง JS Bitwise JS RegExp JS Errors JS ขอบเขต JS Hoisting JS โหมดเข้มงวด JS คำสำคัญนี้ JS Arrow Function JS Classes JS JSON JS Debugging คู่มือสไตล์ JS JS แนวทางปฏิบัติที่ดีที่สุด JS ความผิดพลาด JS Performance JS สงวนคำ

เวอร์ชัน JS

เวอร์ชัน JS JS 2009 (ES5) เจเอส 2015 (ES6) JS 2016 JS 2017 JS 2018 JS IE / ขอบ JS History

วัตถุ JS

คำจำกัดความของวัตถุ คุณสมบัติของวัตถุ วิธีการวัตถุ การแสดงวัตถุ อุปกรณ์เสริมวัตถุ ตัวสร้างวัตถุ ต้นแบบวัตถุ วัตถุ Iterables ชุดวัตถุ แผนที่วัตถุ การอ้างอิงวัตถุ

ฟังก์ชัน JS

คำจำกัดความของฟังก์ชัน พารามิเตอร์ฟังก์ชัน เรียกใช้ฟังก์ชัน เรียกฟังก์ชัน ฟังก์ชัน สมัคร การปิดฟังก์ชัน

JS Classes

แนะนำคลาส การสืบทอดคลาส คลาสคงที่

JS Async

JS Callbacks JS แบบอะซิงโครนัส JS Promises JS Async/รอ

JS HTML DOM

บทนำ DOM วิธี DOM เอกสาร DOM องค์ประกอบ DOM DOM HTML แบบฟอร์ม DOM DOM CSS ภาพเคลื่อนไหว DOM กิจกรรม DOM DOM Event Listener การนำทาง DOM โหนด DOM DOM Collections รายการโหนด DOM

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

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

JS Web APIs

แนะนำ Web API เว็บฟอร์ม API API ประวัติเว็บ API ที่เก็บข้อมูลเว็บ Web Worker API API ดึงเว็บ เว็บ Geolocation API

JS AJAX

บทนำ AJAX AJAX XMLHttp คำขอ AJAX การตอบสนอง AJAX ไฟล์ AJAX XML AJAX PHP AJAX ASP ฐานข้อมูล AJAX แอปพลิเคชัน AJAX ตัวอย่าง AJAX

JS JSON

บทนำ JSON ไวยากรณ์ JSON JSON กับ XML ประเภทข้อมูล JSON JSON Parse JSON สตริงริฟาย วัตถุ JSON อาร์เรย์ JSON เซิร์ฟเวอร์ JSON JSON PHP JSON HTML JSON JSONP

JS กับ jQuery

ตัวเลือก jQuery jQuery HTML jQuery CSS jQuery DOM

JS กราฟิก

JS กราฟิก JS Canvas JS Plotly JS Chart.js JS Google Chart JS D3.js

ตัวอย่าง JS

ตัวอย่าง JS JS HTML DOM JS HTML อินพุต JS HTML Objects JS HTML Events JS Browser JS Editor JS แบบฝึกหัด JS Quiz ใบรับรอง JS

JS References

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


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

ระวัง!

คำสั่ง "ใช้เข้มงวด" เป็นที่รู้จักเฉพาะที่จุดเริ่มต้นของสคริปต์หรือฟังก์ชัน