js严格模式
2017-08-06 20:11
218 查看
1.为什么用严格模式
消除Javascript语法的一些不合理、不严谨之处,减少一些怪异行为;
消除代码运行的一些不安全之处,保证代码运行的安全;
提高编译器效率,增加运行速度;
为未来新版本的Javascript做好铺垫。
2.进入标志
3.如何调用
4.严格模式对Javascript的语法和行为,都做了一些改变。
4.1 全局变量显式声明
在正常模式中,如果一个变量没有声明就赋值,默认是全局变量。严格模式禁止这种用法,全局变量必须显式声明。
4.2 禁止this关键字指向全局对象
因此,使用构造函数时,如果忘了加new,this不再指向全局对象,而是报错。
4.3禁止删除变量
严格模式下无法删除变量。只有configurable设置为true的对象属性,才能被删除。
4.4对象不能有重名的属性
正常模式下,如果对象有多个重名属性,最后赋值的那个属性会覆盖前面的值。严格模式下,这属于语法错误。
4.5函数不能有重名的参数
正常模式下,如果函数有多个重名的参数,可以用arguments[i]读取。严格模式下,这属于语法错误。
详见阮一峰的Javascript 严格模式详解
消除Javascript语法的一些不合理、不严谨之处,减少一些怪异行为;
消除代码运行的一些不安全之处,保证代码运行的安全;
提高编译器效率,增加运行速度;
为未来新版本的Javascript做好铺垫。
2.进入标志
"use strict";
3.如何调用
//针对单个脚本 <script> "use strict"; console.log("这是严格模式。"); </script> //针对单个函数 function strict(){ "use strict"; return "这是严格模式。"; }
4.严格模式对Javascript的语法和行为,都做了一些改变。
4.1 全局变量显式声明
在正常模式中,如果一个变量没有声明就赋值,默认是全局变量。严格模式禁止这种用法,全局变量必须显式声明。
"use strict"; v = 1; // 报错,v未声明 for(i = 0; i < 2; i++) { // 报错,i未声明 }
4.2 禁止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未定义
4.3禁止删除变量
严格模式下无法删除变量。只有configurable设置为true的对象属性,才能被删除。
"use strict"; var x; delete x; // 语法错误 var o = Object.create(null, {'x': { value: 1, configurable: true }}); delete o.x; // 删除成功
4.4对象不能有重名的属性
正常模式下,如果对象有多个重名属性,最后赋值的那个属性会覆盖前面的值。严格模式下,这属于语法错误。
"use strict"; var o = { p: 1, p: 2 }; // 语法错误
4.5函数不能有重名的参数
正常模式下,如果函数有多个重名的参数,可以用arguments[i]读取。严格模式下,这属于语法错误。
"use strict"; function f(a, a, b) { // 语法错误 return ; }
详见阮一峰的Javascript 严格模式详解
相关文章推荐
- js严格模式实例
- js之严格模式
- 原生JS(3)严格模式、变量声明、类型
- 3.1.4 js的严格模式
- JS的解析顺序和作用域(严格模式)
- JS严格模式
- js的严格模式
- -_-#【Better JS Code】严格模式
- js严格模式详解
- JS严格模式的限制
- JS的解析顺序和作用域(严格模式)
- JS严格模式和非严格模式的区别
- js中的严格模式和非严格模式的比较
- ES6的let须在js严格模式下才能运行
- JS的解析顺序和作用域(严格模式)
- js中的 "use strict" 做了什么?使用严格模式有什么优点
- const、let、var区别+js严格模式
- JS严格模式下常见问题汇总
- Js中的严格模式use strict
- js学习笔记(严格模式)