js严格模式


使用

针对整个脚本文件:将use strict放在脚本文件的第一行,则整个脚本文件将以严格模式运行。
针对单个函数:将use strict放在函数体的第一行,则整个函数以严格模式运行。
PS:如果浏览器不支持,则这句话只解析为一条简单的语句, 没有任何副作用。
脚本文件的变通写法:因为第一种调用方法不利于文件合并,所以更好的做法是,借用第二种方法,将整个脚本文件放在一个立即执行的匿名函数之中。

常见问题

1、变量必须声明后再使用

在正常模式中,如果一个变量没有声明就赋值,默认是全局变量。严格模式禁止这种用法,全局变量必须显式声明。

2、禁止this关键字指向全局对象

1
2
3
4
5
var foo = function () {
console.log(this);
}
foo();
// 普通模式打印的是window。严格模式下打印的是undefined

3、构造函数必须通过new实例化对象

1
2
3
4
5
var Cat = function (name) {
this.name = name;
}
Cat('haha');
// 构造函数必须通过new实例化对象,否则报错。因为this为undefined,此时无法设置属性。

4、对象属性不能重复

普通模式下,如果对象有多个重名属性,最后赋值的那个属性会覆盖前面的值。严格模式下,这属于语法错误。

5、函数不能有多个重名的参数

普通模式下,如果函数有多个重名的参数,可以用arguments[i]读取。严格模式下,多个重名的参数属于语法错误。