严格模式
程序员文章站
2022-05-01 22:52:08
...
JavaScript做为一种动态语言,在使用的过程中经常会出现一些令人困惑的情况,例如this指向window。所以JavaScript除了正常的运行模式,还提供了一种运行模式:严格模式
1.设计目的
1.明确禁止一些不合理、不严谨的语法,减少JavaScript的一些怪异行为。
2.增加更多报错的场合,消除代码运行的一些不安全之处,保证代码运行的安全。
3.提高编译器效率,增加运行速度。
4.为未来新版本的JavaScript做好铺垫。
2.开启严格模式
严格模式的开启只需要输入这句代码即可
'use strict'
值得注意的是老版本的浏览器会把它当作一行普通字符串,加以忽略。新版本的浏览器就会进入严格模式。同时我们需要把这一句代码放在第一行才会进入严格模式
几个具体的应用例子
2.1在脚本内部使用
<script>
'use strict';
console.log('这是严格模式');
</script>
2.2在函数内部使用
function strict() {
'use strict';
return '这是严格模式';
}
2.3不同模式脚本合并
//正常模式代码
(function () {
'use strict';
// 严格模式代码
})();
3.严格模式的几个主要特点
3.1只读属性不可写
严格模式下报错
'use strict';
'abc'.length = 5;
//TypeError: Cannot assign to read only property 'length' of string 'abc'
正常模式下只读属性不变,但不报错
let string = 'abc'
string.length = 5;
console.log(string.length)
//3
这是对象的自有属性对应的属性描述符
var str = Object('abc');
console.log(Object.getOwnPropertyDescriptor(str, 'length'))
//{ value: 3,
writable: false,
enumerable: false,
configurable: false }
总的来说,对于对象不允许的操作进行操作,在严格模式下都会报错,正常模式下不变,但是不会报错
3.2全局变量显式声明
在正常模式下,如果一个变量没有声明就使用,会把它当做一个全局变量处理而不会报错
a = 1
console.log(a) //1
在严格模式下会报错
'use strict'
a = 1
//ReferenceError: a is not defined
3.3禁止this关键字指向window
由于this的指向不确定,在一些情况下this可能指向window而造成一些意想不到的结果。在严格模式下,直接禁止了这种指向
function fn() {
'use strict'
this.a = 1
}
fn()
//TypeError: Cannot set property 'a' of undefined
3.4禁止删除变量
严格模式下无法删除变量,如果使用delete命令删除一个变量,会报错。只有对象的属性,且属性的描述对象的configurable属性设置为true,才能被delete命令删除。
'use strict';
var x;
delete x; // 语法错误
4总结
这只是我目前觉得严格模式比较有意义的几个方面,其他的暂时没用过也不知道具体意义就先不写。更多详情可以看一下MDN的说明