欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

严格模式

程序员文章站 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的说明