JavaScript中“use strict”的作用
原文:What Does “use strict” Do in JavaScript?
JavaScript的“use strict”会开启严格模式。本文解释了何为严格模式。
JavaScript的严格模式对于处理常见的错误更为严格。除非有足够的理由,否则最好开启严格模式。
要开启严格模式,在文件或函数以字符串'use strict'
作为第一个表达式即可。
1 | // 如果是一个 .js 文件, 可以在文件的开头写入'use strict'. |
1 | function foo() { |
1 | var x = 1; |
使用严格模式主要有几个好处:
未声明变量的引用错误
在非严格模式,以下代码隐式的创建了一个全局变量x。
1 | function foo() { |
在严格模式下,在未使用let
或var
声明x
时,设置x = 42
会抛出错误:
1 | ; |
this默认指向undefined
在非严格模式下,调用一个未绑定任何对象的函数时,this
会指向全局对象。是不是很违反直觉?
1 | const foo = function() { |
严格模式下,this
指向undefined
。
1 | ; |
强制只读属性
Object.freeze()函数可以使JavaScript对象成为不可变对象,对冻结的对象,不能添加、移除属性,也不能修改已有属性。
但是,Object.freeze()
有个意想不到的问题:它只在严格模式下禁止修改对象,在非严格模式,修改一个冻结的对象,JavaScript运行时会允许操作。
1 | const frozen = function() { |
不允许对原始类型设置属性
在非严格模式,对数值变量设置属性,会失败但不报错。
1 | let answer = 42; |
严格模式下,对数值变量设置属性,会抛出TypeError
错误。
1 | ; |
阻止删除prototype
非严格模式下,对不可删除的属性执行delete会失败但不报错:
1 | // 非严格模式下失败不报错 |
在严格模式下,删除prototype
抛出TypeError
错误:
1 | ; |