js严格模式
本文章仅做学习之用,转载自阮一峰老师的个人博客。
1.在脚本文件的开头插入'use strict';
ex:
<script type="text/javascript"> 'use strict'; console.log('这是严格模式') </script> <script type="text/javascript"> console.log('这是正常模式') </script>
2.针对单个函数
function strict(){ "use strict"; return "这是严格模式。"; } function notStrict() { return "这是正常模式。"; }
3.严格模式的一些特点
3.1.变量必须声明
"use strict"; v = 1; // 报错,v未声明 for(i = 0; i < 2; i++) { // 报错,i未声明 }
3.2.静态绑定
3.3.创建eval作用域
3.4.禁止this对象指向全局对象
function f(){ return !this; } // 返回false,因为"this"指向全局对象,"!this"就是false function f(){ "use strict"; return !this; } // 返回true,因为严格模式下,this的值为undefined,所以"!this"为true。
因此,使用构造函数时,如果忘了加new,this不再指向全局对象,而是报错。
function f(){ "use strict"; this.a = 1; }; f();// 报错,this未定义
3.5.禁止删除变量
严格模式下无法删除变量。只有configurable设置为true的对象属性,才能被删除。
"use strict"; var x; delete x; // 语法错误 var o = Object.create(null, {'x': { value: 1, configurable: true }}); delete o.x; // 删除成功
3.6.对象不能有重名属性
"use strict"; var o = { p: 1, p: 2 }; // 语法错误
霉霉霉霉霉霉霉霉霉霉霉霉霉霉霉霉