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

·  阅读 857

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

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

什么是严格模式

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

如何使用

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

"use strict"
复制代码

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

function demo(){
	"use strict"
	// do something...
}
复制代码

严格模式下创建变量

在非严格模式下,可以直接声明一个全局变量,而不是用 var、let 或 const 关键字,并且还不报错。示例:

a = 1;
复制代码

如果是在严格模式下,以上面方式声明变量,则不被允许,会在执行代码是抛出ReferenceError。 并且在严格模式下,不允许在变量上调用 delete,这也会导致ReferenceError异常,如果在普通模式下,即使失败也是静默返回一个 false。

let a = 1;
delete a;
复制代码

严格模式下的对象

在严格模式下操作对象,以下这些情况也会引发错误抛出异常:

  • 给只读属性赋值会抛出TypeError。
  • 在不可配置属性上使用delete会抛出TypeError。
  • 给不存在的对象添加属性会抛出TypeError。

此外,相对于非严格模式,声明两个重复的属性名也会抛出语法错误,在普通模式下则不会,最后声明的属性才会生效。

const obj = {
	name: "Sam",
	name: "Echo"
}
复制代码

不过值得注意的是,在 ES6 中又删除了这个限制,也就是说在严格模式下声明重复属性也不会抛出异常了。

欢迎阅读其它文章

分类:
前端