JavaScript 的设计有一些糟粕,常常带来问题。ECMAScript 作为 JavaScript 的标准化,在 5.0 版本中增加了严格模式(strict mode),试图解决 JavaScript 存在的一些问题。要使用严格模式,可以在文件开始或者函数开始加上这一句代码:
"use strict";
如果这句代码放在文件的开始,将对后面所有的代码启用严格模式,而放在函数内部将只对该函数启用严格模式。我们来看看严格模式有那些限制。
1. 变量的声明必需使用 var 关键字。例如:
a = 1; // wrong var a = 1; // right
2. 如果函数调用时没有所属的对象,在函数内部的 this 将不会指向 window 而是 undefined。例如:
function test() { alert(this); } test(); // undefined
3. 对象的属性名称不可重复。例如:
var obj = { foo: true; foo: false; // wrong };
4. 函数的参数不可重复。例如:
function test(a, b, a) { // wrong }
5. with 语法不再可以使用。例如:
with (someobj) { // wrong }
6. eval 成为关键字,不能作为变量名。而且在 eval 中定义的变量只在其中有效。例如:
var a = true; eval("var a = false;"); alert(a); // true
各个浏览器对 JavaScript 的严格模式的支持可以参考[3],基本上,主流的浏览器的最新版本都支持它。
参考资料:
[1] It’s time to start using JavaScript strict mode
[2] JavaScript 严格模式(Strict Mode)介绍
[3] ECMAScript 5 compatibility table
[4] 淺談 ECMAScript 5 嚴格模式
[5] Strict mode - MDN