JavaScript strict mode

"use strict"; ການກໍານົດວິທີ JavaScript ຄວນດຳເນີນໃນ "strict mode".

ຄຳສັ່ງ "use strict"

"use strict" ແມ່ນຄຳສັ່ງໃຫມ່ໃນ JavaScript 1.8.5 (ECMAScript version 5).

ມັນບໍ່ແມ່ນຄຳສັ່ງຫຍັງຫຼັງຈາກນັ້ນມັນແມ່ນຄຳຂອງຄຳຂັດແຍ່ງ, ກຳນົດຂອງ JavaScript ສະບັບເກົ່າຈະບໍ່ມີຄວາມຄິດມັນ.

"use strict"; ຄວາມຄົງຄວາມຄິດຂອງມັນແມ່ນສະແດງວ່າວິທີ JavaScript ຄວນດຳເນີນໃນ "strict mode".

ໃນວິທີ "strict" ທ່ານບໍ່ສາມາດ, ເອງນັ້ນ, ນຳໃຊ້ຈຳນວນທີ່ບໍ່ຖືກປະກາດ.

ສະບັບພາຍໃນຂອງບົດສະຫຼັດທີ່ສະບັບບັດເດດໄດ້ສະບັບວິທີ "strict":

  • IE ສະບັບ 10 ຕໍ່ມາ
  • Firefox ສະບັບ 4 ຕໍ່ມາ
  • Chrome ສະບັບ 13 ຕໍ່ມາ
  • Safari ສະບັບ 5.1 ຕໍ່ມາ
  • ສະບັບ Opera ສະບັບ 12 ຕໍ່ມາ

ການປະກາດວິທີ "strict"

ການເພີ່ມ "use strict"; ການປະກາດວິທີ "strict".

ການປະກາດວິທີ "strict" ໃນຫົວໜ້າບົດສະຫຼັດ (ທຸກການລະບຽບໃນບົດສະຫຼັດຈະດຳເນີນໃນວິທີ "strict"):

ຄວາມຄົງຄວາມຄິດ

"use strict";
x = 3.14;       // ຈະເປັນຜົນກະທົບການຂັດຕະວິດ ຍ້ອນ x ຍັງບໍ່ຖືກປະກາດ

ທ້າທາຍຕະຫລອດຕອນຕົ້ນ

ຄວາມຄົງຄວາມຄິດ

"use strict";
myFunction();
function myFunction() {
     y = 3.14;   // ຈະເປັນຜົນກະທົບການຂັດຕະວິດ ຍ້ອນ y ຍັງບໍ່ຖືກປະກາດ
}

ທ້າທາຍຕະຫລອດຕອນຕົ້ນ

ການປະກາດວິທີ "strict" ໃນພາກສ່ວນຫຼັງການການປະກາດ (ພຽງແຕ່ການລະບຽບທີ່ໃນພາກສ່ວນຫຼັງການປະກາດຈະດຳເນີນໃນວິທີ "strict"):

x = 3.14;       // ຈະບໍ່ເປັນຜົນກະທົບການຂັດຕະວິດ
myFunction();
function  myFunction() {
	"use strict";
	 y = 3.14;   // ຈະເປັນຜົນກະທົບການຂັດຕະວິດ
}

ທ້າທາຍຕະຫລອດຕອນຕົ້ນ

"use strict"; ວິທີ

ສັນຍາກົດລະບຽບຂອງວິທີ "strict" ໄດ້ຖືກອອກແບບເພື່ອການຮັບຮອງກັບເກົ່າກຳນົດຂອງ JavaScript.

ການຮ່າງການຂອງຈຳນວນຂອງ JavaScript ທີ່ເປັນຄຳຂັດແຍ່ງ (ອີງຕາມ 4+5) ຫຼື ຄຳຂັດແຍ່ງ ("Bill Gates") ຈະບໍ່ມີຜົນດັງລົບ. ມັນຈະຮ່າງການສະຖານະປະກອບທີ່ບໍ່ມີຊື່ຫຼັງຈາກນັ້ນຈະຫາຍຫາຍ.

所有 "use strict"; 只会对“理解”其含义的新编译器产生影响。

为什么使用严格模式?

严格模式使我们更容易编写“安全的” JavaScript。

严格模式把之前可接受的“坏语法”转变为真实的错误。

ໃນ JavaScript ບໍ່ລະມັດ,ຖ້າຈະຂຽນຊື່ຄວາມປະສົງຜິດຫົວຂໍ້ຈະເປັນການສົ່ງຄວາມຜິດພາດໃນການໃຊ້ບໍ່ລະມັດຫຼືຈະບໍ່ສາມາດສ້າງຄວາມປະສົງທົ່ວໄປຫຼືວັດຖຸທົ່ວໄປຫຼືວັດຖຸທົ່ວໄປ.

ໃນ JavaScript ບໍ່ລະມັດ,ຖ້າຈະຂຽນຊື່ຄວາມປະສົງຜິດຫົວຂໍ້ຈະສ້າງຄວາມປະສົງທົ່ວໄປຫຼືວັດຖຸທົ່ວໄປຫຼືວັດຖຸທົ່ວໄປ.

ໃນການໃຊ້ JavaScript ບໍ່ລະມັດ,ການຈະກະຈາຍຄວາມປະສົງໃຫ້ສິ່ງບໍ່ສາມາດຂຽນໄດ້ (ທີ່ສາມາດເບິ່ງໄດ້ພຽງພໍ, ບໍ່ມີຄວາມປະສົງ, ຫຼືວັດຖຸ) ຫຼືການຈະກະຈາຍຄວາມປະສົງໃຫ້ຄວາມປະສົງບໍ່ມີຊື່ອາດຈະເປັນການສົ່ງຄວາມຜິດພາດ。

ສິ່ງທີ່ບໍ່ອະນຸຍາດໃນການໃຊ້ບໍ່ລະມັດ:

ການໃຊ້ຄວາມປະສົງບໍ່ໄດ້ຖະແຫຼງຄວາມປະສົງບໍ່ອາດອະນຸຍາດ:

"use strict";
x = 3.14;                // ຈະເປັນການສົ່ງຄວາມຜິດພາດ

ທ້າທາຍຕະຫລອດຕອນຕົ້ນ

ວັດຖຸນີ້ກໍ່ແມ່ນຄວາມປະສົງ

ການໃຊ້ວັດຖຸບໍ່ໄດ້ຖະແຫຼງວັດຖຸບໍ່ອາດອະນຸຍາດ:

"use strict";
x = {p1:10, p2:20};      // ຈະເປັນການສົ່ງຄວາມຜິດພາດ

ທ້າທາຍຕະຫລອດຕອນຕົ້ນ

ການລຶບຄວາມປະສົງ (ຫຼືວັດຖຸ) ບໍ່ອະນຸຍາດ:

"use strict";
var x = 3.14;
delete x;                // ຈະເປັນການສົ່ງຄວາມຜິດພາດ

ທ້າທາຍຕະຫລອດຕອນຕົ້ນ

ການລຶບຄວາມປະສົງບໍ່ອະນຸຍາດ:

"use strict";
function x(p1, p2) {}; 
delete x;                 // ຈະເປັນການສົ່ງຄວາມຜິດພາດ

ທ້າທາຍຕະຫລອດຕອນຕົ້ນ

ການບໍ່ສາມາດທີ່ມີຊື່ພະລາງຄຳວຽນທີ່ບໍ່ອາດອະນຸຍາດ:

"use strict";
function x(p1, p1) {};   // ຈະເປັນການສົ່ງຄວາມຜິດພາດ

ທ້າທາຍຕະຫລອດຕອນຕົ້ນ

ຄຳວຽນຈຳນວນທີ່ແບບໂອເຄຣແມັນບໍ່ອາດອະນຸຍາດ:

"use strict";
var x = 010;             // ຈະເປັນການສົ່ງຄວາມຜິດພາດ

ທ້າທາຍຕະຫລອດຕອນຕົ້ນ

ຄຳຂັບໃຫ້ຄຳວຽນບໍ່ອາດອະນຸຍາດ:

"use strict";
var x = \010;            // ຈະເປັນການສົ່ງຄວາມຜິດພາດ

ທ້າທາຍຕະຫລອດຕອນຕົ້ນ

ການຂຽນໃນຄວາມປະສົງທີ່ຕ້ອງບັນທຶກບໍ່ອາດອະນຸຍາດ:

"use strict";
var obj = {};
Object.defineProperty(obj, "x", {value:0, writable:false});
obj.x = 3.14;            // ຈະເປັນການສົ່ງຄວາມຜິດພາດ

ທ້າທາຍຕະຫລອດຕອນຕົ້ນ

ການຂຽນໃນຄວາມປະສົງທີ່ສາມາດເບິ່ງໄດ້ພຽງພໍບໍ່ອາດອະນຸຍາດ:

"use strict";
var obj = {get x() {return 0} };
obj.x = 3.14;            // ຈະເປັນການສົ່ງຄວາມຜິດພາດ

ທ້າທາຍຕະຫລອດຕອນຕົ້ນ

ການລຶບຄວາມປະສົງບໍ່ສາມາດລຶບຈະບໍ່ອາດອະນຸຍາດ:

"use strict";
delete Object.prototype; // ຈະເປັນການສົ່ງຄວາມຜິດພາດ

ທ້າທາຍຕະຫລອດຕອນຕົ້ນ

ຄຳວຽນ "eval" ບໍ່ສາມາດໃຊ້ເປັນຄວາມປະສົງ:

"use strict";
var eval = 3.14;         // ຈະເປັນການສົ່ງຄວາມຜິດພາດ

ທ້າທາຍຕະຫລອດຕອນຕົ້ນ

ຄຳວຽນ "arguments" ບໍ່ສາມາດໃຊ້ເປັນຄວາມປະສົງ:

"use strict";
var arguments = 3.14;    // ຈະເປັນການສ້າງຄວາມຜິດພາດ

ທ້າທາຍຕະຫລອດຕອນຕົ້ນ

with ຄຳສັ່ງບໍ່ອະນຸຍາດທີ່ໃຊ້:

"use strict";
with (Math){x = cos(2)}; // ຈະເປັນການສ້າງຄວາມຜິດພາດ

ທ້າທາຍຕະຫລອດຕອນຕົ້ນ

ບໍ່ອະນຸຍາດທີ່ໃຊ້ຄຳສັ່ງ with ສຳລັບຄວາມປອດໄພ: eval() ທີ່ຖືກເລືອກວັດຖຸພາຍໃນຂອງການເລືອກວັດຖຸທີ່ຖືກເລືອກ:

"use strict";
eval ("var x = 2");
alert (x);               // ຈະເປັນການສ້າງຄວາມຜິດພາດ

ທ້າທາຍຕະຫລອດຕອນຕົ້ນ

ໃນການເກີດການເລືອກວັດຖຸພາຍໃນການເລືອກວັດຖຸ f() ຄຳປະກອບ this ແມ່ນເປັນວັດຖຸໂລກ. ໃນການໃຊ້ຮູບແບບ strict, ມັນໄດ້ກາຍເປັນ: undefined.

ການກຳນົດຄວາມຄົງອານຸສັນ

ບໍ່ອະນຸຍາດທີ່ຈະໃຊ້ຄຳປະກອບທີ່ນັບເບື້ອງຕໍ່ອະນາຄົດ. ພວກມັນແມ່ນ:

  • implements
  • interface
  • let
  • package
  • private
  • protected
  • public
  • static
  • yield
"use strict";
var public = 1500;      // ຈະເປັນການສ້າງຄວາມຜິດພາດ

ທ້າທາຍຕະຫລອດຕອນຕົ້ນ

ການເຕືອນ

"use strict" ຄຳສັ່ງພຽງແຕ່ຂັ້ນສັ່ງຫນຶ່ງຫນຶ່ງຫນຶ່ງຫນຶ່ງຫນຶ່ງຕົ້ນໄດ້ຖືກຮັບຮູ້.