JS 严格模式
启用
方式1:整个脚本启用严格模式,在顶部执行:"use strict";
'use strict'; var num = 123;
方式2:在指定函数中执行严格模式,在函数体第一行:"use strict";
function func(){
'use strict'; // 只有该函数使用严格模式
var num = 123;
}
- 不支持严格模式的浏览器把 "use strict" 当做字符串语句执行,支持的浏览器将开启严格模式。
- 支持严格模式的浏览器包括:IE10+、Firefox4+、Safari12+、Opera12+、Chrome 。
规则
[1] 变量:不允许意外创建全局变量;不能对变量调用 delete 操作符。
‘use strict’; message = 'hello world!'; ‘use strict’; var color = 'red'; delete color;
[2] 对象:不能为只读属性赋值;不能为不可配置的属性使用 delete 操作。
‘use strict’;
var person = {
name:'cook'
};
Object.defineProperty(person,'name',{writable:false});
person.name = 'Nicholas';
‘use strict’;
var person = {
name:'cook'
};
Object.defineProperty(person,'name',{configurable:false});
delete person.name;
[3] 函数:参数必须唯一;修改形参不会反映到 arguments 中;不允许使用 arguments.callee 和 arguments.caller。
‘use strict’;
function(num,num){
//TODO
}
function showValue(value){
value = 'Foo';
alert(arguments[0]);
//非严格模式:'Foo'
//严格模式:"Hi"
}
showValue('Hi');
‘use strict’;
function fn(num){
return arguments.callee(num);
}
fn(2);
‘use strict’;
function outer(){
inner();
}
function inner(){
alert(inner.caller());
}
outer();
[4] 不允许 eval() 在包含上下文中创建变量或函数。
‘use strict’;
function fn(){
eval('var x = 10;');
alert(x);
}
fn();
// 允许以下操作
var result = eval('var x=10,y=11,x+y');
alert(result); // 21
[5] 不允许使用 eval 和 arguments 作为标识符,也不允许读写它们的值。
‘use strict’; var eval = 10; var arguments = 20;
[6] 不允许 this 值为 null 或 undefined。
‘use strict’;
var color = ‘red’;
function fn(){
alert(this.color);
}
fn();
[7] 不允许使用 with 语句。
‘use strict’;
with(location){
alert(href);
}
[8] 不允许使用八进制字面量。
‘use strict’; var value = 010;