JavaScript strict mode
- 上一页 JS Hoisting
- 下一页 JS this 关键词
"use strict";
Tinutukoy ng ito ang JavaScript code na dapat nagsasagawa sa "strict mode".
"use strict" directive
"use strict"
Ito ay isang bagong directive sa JavaScript 1.8.5 (ECMAScript bersyon 5).
Ito ay hindi isang statement, ito ay isang literal expression, ang mas maagang bersyon ng JavaScript ay walang pagkakaroon ng pagpapasimula dito.
"use strict";
Ang ginagamit nito ay upang ipaalaala na ang JavaScript code ay dapat nagsasagawa sa "strict mode".
Sa strict mode, hindi mo maaring gamitin ang hindi nagdeklara na variable, halimbawa.
Ang mga bersyon ng browser na sumusuporta sa strict mode ay:
- Bersyon 10 at higit pa ng IE
- Bersyon 4 at higit pa ng Firefox
- Bersyon 13 at higit pa ng Chrome
- Bersyon 5.1 at higit pa ng Safari
- Bersyon 12 at higit pa ng Opera
Idedeklara ang strict mode
Sa pamamagitan ng pagdaghana ng "use strict";
Upang idedeklara ang strict mode.
Idedeklara sa simula ng script, may pangkalahatang sakop (ang lahat ng code sa script ay nagsasagawa sa strict mode):
Mga halimbawa
"use strict"; x = 3.14; // ito ay magiging mali, dahil ang x ay hindi pa nagdeklara
Mga halimbawa
"use strict"; myFunction(); function myFunction() { y = 3.14; // ito ay magiging mali, dahil ang y ay hindi pa nagdeklara }
Ipaglaban ang strict mode sa loob ng function, may lokal na sakop (ang lahat ng code sa loob ng function ay nagsasagawa sa strict mode):
x = 3.14; // ito ay walang mali myFunction(); function myFunction() { "use strict"; y = 3.14; // ito ay magiging mali }
"use strict"; syntax
Idinisenyo ang syntax ng strict mode upang ayon sa mas maagang bersyon ng JavaScript.
Pangkompilahan ng literal na numero sa JavaScript program (halimbawa, 4+5) o literal na string ("Bill Gates") ay walang negatibong epekto. Ito lamang ay kumompil ng di umiiral na variable at mag-iwan ng walang ginagamit.
Lahat "use strict";
Ito ay makakaimpluwensya lamang sa bagong compiler na "naunawaan" ang kahulugan nito.
Bakit gamitin ang strict mode?
Ang strict mode ay gumagawa ng mas madaling magsulat ng "secure" JavaScript.
Ang strict mode ay nagbabago ng "bad syntax" na dati na pinapayagan ng tunay na error.
Bilang halimbawa, sa ordinaryong JavaScript, ang pagkakamali sa pangalan ng variable ay magbibigay ng bagong global variable. Sa strict mode, ito ay magiging error, kaya hindi ito maaaring magbigay ng bagong global variable ng walang kailangan.
Sa ordinaryong JavaScript, kung napagtalaga sa hindi maaaring pindutin na attribute, walang feedback ng error ang makakakita ang developer.
Sa strict mode, ang pagtatalaga sa hindi maaaring pindutin na attribute, na puwedeng kumuha lamang, wala o wala na attribute, o variable o object na wala, ay magiging error.
Ang mga hindi pinapayagan sa strict mode
Hindi pinapayagan ang paggamit ng variable ng walang pagdeklara, ito ay pinapayagan sa strict mode:
"use strict"; x = 3.14; // Ito ay magiging error
Ang object ay variable din
Hindi pinapayagan ang paggamit ng object ng walang pagdeklara:
"use strict"; x = {p1:10, p2:20}; // Ito ay magiging error
Hindi pinapayagan ang pagtanggal ng variable (o object):
"use strict"; var x = 3.14; delete x; // Ito ay magiging error
Hindi pinapayagan ang pagtanggal ng function:
"use strict"; function x(p1, p2) {}; delete x; // Ito ay magiging error
Hindi pinapayagan ang pagpapaubos ng pangalang parameter na walang kailangan:
"use strict"; function x(p1, p1) {}; // Ito ay magiging error
Hindi pinapayagan ang octal number text:
"use strict"; var x = 010; // Ito ay magiging error
Hindi pinapayagan ang escape character:
"use strict"; var x = \010; // Ito ay magiging error
Hindi pinapayagan ang pagpunta sa readonly na attribute:
"use strict"; var obj = {}; Object.defineProperty(obj, "x", {value:0, writable:false}); obj.x = 3.14; // Ito ay magiging error
Hindi pinapayagan ang pagpunta sa attribute na puwedeng kumuha lamang:
"use strict"; var obj = {get x() {return 0} }; obj.x = 3.14; // Ito ay magiging error
Hindi pinapayagan ang pagtanggal ng hindi maaaring tanggalin na attribute:
"use strict"; delete Object.prototype; // Ito ay magiging error
String "eval" naa maaaring gamit bilang variable:
"use strict"; var eval = 3.14; // Ito ay magiging error
String "arguments" naa maaaring gamit bilang variable:
"use strict"; var arguments = 3.14; // 这将引发错误
with
语句是不允许的:
"use strict"; with (Math){x = cos(2)}; // 这将引发错误
出于安全考虑,不允许 eval()
在其被调用的作用域中创建变量:
"use strict"; eval ("var x = 2"); alert (x); // 这将引发错误
在类似 f() 的函数调用中,this 的值是全局对象。在严格模式中,现在它成为了 undefined
。
对未来的保障
严格模式中不允许使用为未来预留的关键词。它们是:
- implements
- interface
- let
- package
- private
- protected
- public
- static
- yield
"use strict"; var public = 1500; // 这将引发错误
警告
"use strict"
指令只能在脚本或函数的开头被识别。
- 上一页 JS Hoisting
- 下一页 JS this 关键词