JS Хатуу горим буюу Strict Mode
JavaScript-д Strict Mode буюу Хатуу горимд кодлох үед "use strict";
түлхүүр үгээр тодорхойлдог.
"use strict"-н удирдамж
"use strict";
удирдамж нь ESMAScript version 5 дээр шинээр бий болсон.
Энэ нь JavaScript-н өмнөх хувилбаруудад дэмждэггүй байсан илэрхийлэл юм.
"use strict";
зорилго нь кодыг хатуу горимд гүйцэтгэх ёстойг зааж байгаа юм.
Хатуу горимын хувьд та зарлаагүй хувьсагчийг ашиглаж чадахгүй.
Internet Explorer 9 ба түүнээс доош хувилбараас бусад орчин үеийн бүх хөтөч хатуу горим ашиглахыг дэмждэг.
"use strict" нь зүгээр л мөр тул IE 9 нь ойлгохгүй байсан ч алдаа өгөхгүй.
Хатуу горим зарлах
Хатуу горимыг кодын эхэнд эсвэл функцийн эхэнд 'use strict';
эсвэл "use strict";
гэж зарлана.
Кодын эхэнд зарлавал ГЛОБАЛ орчны бүх кодод хамаарна, харин функц дотор зарлавал локал орчинд хамаарах болно.
Жишээ
<script>
'use strict';
z = 91; /* Энэ тохиолдолд алдаа өгнө z -г зарлаагүй байна. */
</script>
Жишээ
<script>
'use strict';
myFunc();
function myFunc() {
z = 91; /* Энэ тохиолдолд алдаа өгнө z -г зарлаагүй байна. Функцийг ГЛОБАЛ орчноос дуудаж байна */
}
</script>
Хатуу горимыг функц дотор зарлаж үзье. Энэ тохиолдолд зөвхөн локал орчинд ажиллах болно.
Жишээ
<script>
n = 91;
myFunc();
function myFunc() {
'use strict';
z = 91; /* Энэ тохиолдолд алдаа өгнө z -г зарлаагүй байна. */
}
</script>
Яагаад хатуу горим гэж?
Хатуу горимыг ашиглахад хялбар, мөн кодод аюулгүй байдлыг хангаж ажилладаг.
Хатуу горим нь өмнө нь бичигдсэн кодын муу бичиглэлийг алдаа болгон өөрчилдөг.
Жишээлбэл: JavaScript нь хувьсагчийн нэрийг буруу бичих үед шинэ ГЛОБАЛ хувьсагч үүсгэдэг бол хатуу горимд энэ нь алдаа болдог. Өөрөөр хэлбэл ГЛОБАЛ орчин санамсаргүй шинэ хувьсагч үүсгэхгүй гэсэн үг юм.
Хатуу горим юуг зөвшөөрөхгүй вэ?
Хувьсагчийг зарлахгүйгээр ашиглахыг хориглоно.
'use strict';
z = 55; /* Зарлаагүй хувьсагч ашиглаж болохгүй*/
Объект нь бас хувьсагч тул мөн адил зарлахгүйгээр ашиглахыг хориглоно.
'use strict';
z = {o1: 50, o2: 100}; /* Зарлаагүй хувьсагч ашиглаж болохгүй*/
Функц устгахыг зөвшөөрөхгүй.
'use strict';
function z(p1, p2) {};
delete z; /* Функц устгаж болохгүй*/
Параметрийн нэр ижил байхыг зөвшөөрөхгүй
'use strict';
function z(p1, p1) {}; /* Ижил параметр дамжуулж болохгүй*/
Стандарт бус тоог зөвшөөрөхгүй
'use strict';
var x = 050; /* Стандарт бус тоо болохгүй*/
Стандарт бус тэмдэгт тоог зөвшөөрөхгүй
'use strict';
var x = \050; /* Стандарт бус тэмдэгт, тоо болохгүй*/
Зөвхөн унших эрхтэй объектод бичих үйлдэл хийхийг хориглоно
'use strict';
var obj = {};
Object.defineProperty(obj, "z", {value:0, writable:flase});
obj.z = 44; /* Объектод бичиж болохгүй*/
Зөвхөн авах эрхтэй объектод бичих үйлдэл хийхийг хориглоно
'use strict';
var obj = {get z() {return 0} };
obj.z = 44; /* Объектод бичиж болохгүй*/
Undeletable property -г утсгахыг хориглоно
'use strict';
delete Object.prototype;
eval
болон arguments
нэртэй хувьсагч зарлахыг хориглоно
'use strict';
var eval = 55; /* eval нэртэй хувьсагч байж болохгүй*/
'use strict';
var arguments = 55; /* arguments нэртэй хувьсагч байж болохгүй*/
with
statement ашиглахыг хориглоно
'use strict';
var eval = 55; /* eval нэртэй хувьсагч байж болохгүй*/
Аюулгүй байдлын хүрээнд eval()
функц ашиглан хувьсагч үүсгэхийг хориглоно
'use strict';
eval ("var x = 2");
alert (x); /* Хувьсагч зарлах болохгүй*/
this
түлхүүр үг нь хатуу горимд өөр өөрөөр ажилладаг. Дараагийн хичээлээр this
түлхүүр үгийг үзэх болно.
"use strict"-д түлхүүр үгсийг хувьсагчийн нэр болгон ашиглах боломжгүй
- implements
- interface
- let
- package
- private
- protected
- public
- static
- yield