Js严格模式
JavaScript
严格模式strict mode
,即在严格的条件下运行。严格模式消除了Javascript
语法的一些不合理、不严谨之处,减少一些怪异行为;消除代码运行的一些不安全之处,保证代码运行的安全;提高了引擎的效率,增加运行速度;为未来新的Js
版本做好铺垫。
实例
针对整个脚本文件启用严格模式
"use strict";
x = 1; // Uncaught ReferenceError: x is not defined
针对函数作用域启用严格模式
x = 1;
function s(){
"use strict";
y = 1; // Uncaught ReferenceError: y is not defined
}
s();
严格模式的限制
不允许直接声明全局变量
// 非严格模式
x = 1;
console.log(window.x); // 1
// 严格模式
"use strict";
var x = 1; // 可以使用var在全局作用域声明全局变量
y = 1; // Uncaught ReferenceError: y is not defined
不允许delete变量和函数
// 非严格模式
var x = 1;
delete x;
console.log(window.x); // undefined
// 严格模式
"use strict";
var x = 1;
delete x; // Uncaught SyntaxError: Delete of an unqualified identifier in strict mode.
要求函数的参数名唯一
// 非严格模式
function s(a, a){
console.log(a + a); // 6
}
s(2, 3);
// 严格模式
"use strict";
function s(a, a){ // Uncaught SyntaxError: Duplicate parameter name not allowed in this context
console.log(a + a);
}
s(2, 3);
不允许使用八进制数字语法
// 非严格模式
var x = 010;
console.log(x); // 8
// 严格模式
"use strict";
var y = 010; // Uncaught SyntaxError: Octal literals are not allowed in strict mode.
var x = 0O10; // 可以使用ES6中的八进制表示法新写法 前缀0o或0O
console.log(x); // 8
不允许使用转义字符
// 非严格模式
var x = "