JavaScript 严格模式(use strict)
本文最后更新于:2024年3月18日 凌晨
JavaScript 严格模式(use strict)
- JavaScript 严格模式(strict mode)即在严格的条件下运行。
使用 “use strict” 指令
- “use strict” 指令在 JavaScript 1.8.5 (ECMAScript5)中新增。
- 它不是一条语句,但是是一个字面量表达式,在 JavaScript 旧版本中会被忽略。
- “use strict” 的目的是指定代码在严格条件下执行。
- 严格模式下你不能使用未声明的变量。
严格模式的限制
1 2 3 4 5
| "use strict"; x = 3.14;
"use strict"; x = {p1:10, p2:20};
|
1 2 3
| "use strict"; var x = 3.14; delete x;
|
1 2 3
| "use strict"; function x(p1, p2) {}; delete x;
|
1 2
| "use strict"; function x(p1, p1) {};
|
1 2
| "use strict"; var x = 010;
|
1 2
| "use strict"; var x = \010;
|
1 2 3 4 5
| "use strict"; var obj = {}; Object.defineProperty(obj, "x", {value:0, writable:false});
obj.x = 3.14;
|
- 不允许对一个使用getter方法读取的属性进行赋值。
1 2 3 4
| "use strict"; var obj = {get x() {return 0} };
obj.x = 3.14;
|
1 2
| "use strict"; delete Object.prototype;
|
1 2
| "use strict"; var eval = 3.14;
|
1 2
| "use strict"; var arguments = 3.14;
|
1 2
| "use strict"; with (Math){x = cos(2)};
|
- 由于一些安全原因,在作用域
eval()
创建的变量不能被调用:
1 2 3
| "use strict"; eval ("var x = 2"); alert (x);
|
1 2 3 4 5 6 7 8 9 10
| function f(){ return !this; }
function f(){ "use strict"; return !this; }
|
- 因此,使用构造函数时,如果忘了加new,this不再指向全局对象,而是报错。
1 2 3 4 5
| function f(){ "use strict"; this.a = 1; }; f();
|
保留关键字
- 为了向将来Javascript的新版本过渡,严格模式新增了一些保留关键字:
- implements
- interface
- let
- package
- private
- protected
- public
- static
- yield
1 2
| "use strict"; var public = 1500;
|