什么是 JavaScript 严格模式,一次性给你讲清楚(三)

1,146 阅读2分钟

这是我参与8月更文挑战的第13天,活动详情查看:8月更文挑战

除了使用一些第三方插件之外,还有什么办法可以提前发现一些比较直观的错误? 答案就是使用 JavaScript 的严格模式。

什么是严格模式

在 ES5 的时候,JS 首次引入了严格模式的概念,它会以更严格的条件去检查你的代码错误,它可以全局使用,也可以局部使用(应用到函数内部)。理解严格模式的规则是非常有必要的,在未来,ECMAScript 会逐步强制全局使用严格模式。

如何使用

非常简单,提供一个不赋值给任何变量的字符串即可。这个字符串为:

"use strict"

你可以在 JS 文件中任何地方声明这个字符串,如果不是声明在函数内部,则表示该模式引用到全局。在函数内部开启严格模式的例子如下:

function demo(){
	"use strict"
	// do something...
}

this 强制转型

在某些特定的情况下,无法确定 this 的值,在使用apply()call()方法时,非严格模式下 null 和 undefined 会强制转换成为全局对象。在严格模式下则不能。以下例子,在严格模式中,会抛出错误,因为 this 是 null。

var a = "Sam";

function demo(){
	alert(this.a);
}
demo.call(null);

这里在调用 demo.call() 的时候,传入 null 作为 this 的值,如果是在非严格模式,则 this 为全局对象,结果会显示“Sam”。而在严格模式下,this 则为 null,在访问时会直接抛出异常。

类与模块的变化

在 ES6 之后,有了类跟模块的概念,对于类,这包括类声明和类表达式,构造函数、实例方法、静态方法、获取方法和设置方法都在严格模式下。对于模块,所有在其内部定义的代码都处于严格模式。

其他变化

严格模式下消除了with语句,为了简单起见,严格模式下去除了这个语法,如果使用,则会抛出语法错误。 严格模式也同时去掉了八进制字面量,在严格模式下使用八进制字面量被认为是无效的语法操作。

欢迎阅读其它文章