ECMAScript 5引入了严格模式(strict mode),严格模式即在严格的条件下进行,其中的一些不确定的行为得到处理。
严格模式
通过在脚本或函数的头部添加"use strict";
表达式来声明。
支持严格模式的浏览器有ie 10+,Firefox 4+,chrome 13+,safari 5.1+,opera 12+。
使用严格模式的好处:
- 消除语法的不合理,不严谨之处,保证代码的运行安全
- 提高编译器效率,增加运行速度
- 为未来新版本的js做铺垫
严格模式的限制
- 不允许使用未声明的变量
对象也是一个变量。
"use strict"
x = {s1:100, s2:99}; //Uncaught ReferenceError: x is not defined
- 不允许对变量或函数使用delete操作符
"use strict"
var x = 1;
delete x; //Uncaught SyntaxError: Delete of an unqualified identifier in strict mode.
- 不允许变量重名
"use strict"
function fs(r1,r1) {
} //Uncaught SyntaxError: Duplicate parameter name not allowed in this context
- 不允许使用八进制
"use strict"
var x = 012; //Uncaught SyntaxError: Octal literals are not allowed in strict mode.
- 抛弃with语句
"use strict"
var str = "hello";
with(str) {
console.log(toUpperCase());
}
//Uncaught SyntaxError: Strict mode code may not include a with statement
- 不可对只读对象赋值,不可对不可配置对象使用delete操作符
"use strict"
console.log(Object.prototype);
delete Object.prototype; //Uncaught TypeError
console.log(Object.prototype);
- 禁止this关键字指向全局对象
"use strict"
function fs() {
console.log(this);
}
fs();
//undefined
- 不可在if内部声明函数
"use strict"
var a=0;
if(a<=2) {
function add() {
a++;
return a;
}
}
add(); //Uncaught ReferenceError: add is not defined
console.log(add()); //非严格模式下返回2