严格模式 - pod4g/tool GitHub Wiki
三种可执行代码类型的严格模式
"use strict"; 必须放到第一行
即,
- 在全局下,"use strict" 必须放在第一行,否则忽略
- 在函数下,"use strict" 必须放在第一行,否则忽略
一个script标签内第一行使用"use strict",并不会影响其他标签。
使用 "use strict"; 来激发浏览器的严格模式,执行js代码
严格模式的兼容性:IE10+(特别注意,IE9虽然实现了ES5,但是并不支持strict mode)
在读underscore源码时,意识到了一种情况,
在严格模式下,定义不符合严格模式规范的代码并不会导致错误,只有执行到此时,才会引发错误:
// 下面的代码并不会抛出错误
(function() {
"use strict";
if(false){ // 如果为true的话,TypeError: 'caller', 'callee', and 'arguments' properties may not be accessed
function test(){
console.log(arguments.callee);
}
test();
}
if(false){ // 如果为true的话,才会报 ReferenceError: test is not defined
test = "hahah";
}
})();
这样设计严格模式是极好的。
例如,我们要判断一个对象是否是Arguments对象,在高级浏览器下,用toString.call(arguments)会正确返回[object Arguments],
但是在IE8-下会返回[object Object],此时,我们还需要判断这个对象是否含有arguments特有的callee属性来确定其是不是arguments对象。。
如果是在严格模式下,访问callee属性会抛出TypeError的,
但是在IE8-下,并不会有严格模式,所以也就是说,访问callee只会发生在不支持严格模式的浏览器下!所以请放心使用严格模式吧!!!
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Strict_mode