标志
"use strict";
//老版本浏览器会自动忽略
调用
//整个文件调用
(function(){
"use strict";
})();
//单个函数调用
function(){
"use strict";
}
语法 行为
严格模式下 ,不声明的变量赋值的话,会报错误
禁止使用with
eval作用域只在内部,不再能够生成全局变量了
this关键字不再指向全局
构造函数如果忘记new this也不会指向全局 ,抛出错误
禁止内部遍历调用栈
function f1(){
"use strict";
f1.caller; // 报错
f1.arguments; // 报错
}
f1();
无法删除变量 只有configurable:true时才可以
"use strict";
var x;
delete x; // 语法错误
var o = Object.create(null, {
x: {
value: 1,
configurable: true
}
});
delete o.x; // 删除成功
正常模式下,对一个对象的只读属性进行赋值,不会报错,只会默默地失败。严格模式下,将报错。
"use strict";
var o = {};
Object.defineProperty(o, "v", { value: 1, writable: false });
o.v = 2; // 报错
严格模式下,对禁止扩展的对象添加新属性,会报错。
严格模式下,删除一个不可删除的属性,会报错。
严格模式下,对一个使用getter方法读取的属性进行赋值,会报错。
对象不能有重名的属性
"use strict";
var o = {
p: 1,
p: 2
}; // 语法错误
多个重名参数报错
"use strict";
function f(a, a, b) { // 语法错误
return ;
}
禁止八进制表示法
不允许对arguments赋值
arguments不再追踪参数的变化
禁止使用arguments.callee
不允许在非函数的代码块内声明函数
"use strict";
if (true) {
function f() { } // 语法错误
}
for (var i = 0; i < 5; i++) {
function f2() { } // 语法错误
}
Now or nerver .