详解JavaScript严格模式的使用方法

 更新时间:2023年05月31日 09:43:01   作者:施主来了  
JavaScript的严格模式(Strict Mode)是一种在代码中启用的特殊模式,用于提供更严格的语法和错误检查,以改善代码质量和增强安全性,本文主要介绍JS的严格模式的用法,可以帮助大家避免一些常见的错误,需要的朋友可以参考下

要启用严格模式,可以在代码的顶部或函数体的开头添加以下语句:

"use strict";

启用严格模式后,会应用一些限制和变化,包括以下几个方面:

  • 变量必须先声明后使用:在严格模式下,变量必须通过 var、let 或 const 关键字进行声明,否则会抛出 ReferenceError。在非严格模式下,未声明的变量会被隐式创建,并被添加到全局对象(比如浏览器环境中的 window 对象)中。

  • 禁止删除变量、函数或函数参数:在严格模式下,使用 delete 操作符删除变量、函数或函数参数会抛出 SyntaxError。

  • 禁止对只读属性进行赋值:在严格模式下,对只读属性(通过 const 关键字声明的常量)进行赋值会抛出 TypeError。

  • 禁止使用八进制字面量:在严格模式下,以 0 开头的数字会被视为八进制字面量,这在非严格模式下是允许的。严格模式下,使用八进制字面量会抛出 SyntaxError。

  • 限制 this 值:在严格模式下,函数内部的 this 值不再是全局对象(比如浏览器环境中的 window 对象),而是undefined,除非通过 call()、apply() 或 bind() 明确指定。

  • 禁止使用重复的函数参数名:在严格模式下,函数参数名不能重复。在非严格模式下,重复的函数参数名会被忽略。

  • 禁止使用 with 语句:在严格模式下,使用 with 语句会抛出 SyntaxError。with 语句在非严格模式下允许将对象的属性添加到作用域链中,但这被认为是不推荐使用的特性,因为它可能导致代码可读性和性能问题。

  • 限制 eval 和 arguments 的赋值:在严格模式下,无法对 eval 和 arguments 进行赋值。在非严格模式下,这种赋值是允许的。

下面是一些使用JavaScript严格模式的例子,展示了严格模式下的限制和行为变化:

  • 变量必须先声明后使用:
"use strict";
x = 10; // 抛出 ReferenceError: x is not defined

在严格模式下,对未声明的变量进行赋值会抛出错误。

  • 禁止删除变量:
"use strict";
var x = 10;
delete x; // 抛出 SyntaxError: Delete of an unqualified identifier in strict mode.

在严格模式下,无法使用 delete 操作符删除变量。

  • 禁止对只读属性进行赋值:
"use strict";
var obj = {};
Object.defineProperty(obj, "x", { value: 10, writable: false });
obj.x = 20; // 抛出 TypeError: Cannot assign to read only property 'x' of object '#<Object>'

在严格模式下,对只读属性进行赋值会抛出错误。

  • 八进制字面量的限制:
"use strict";
var num = 012; // 抛出 SyntaxError: Octal literals are not allowed in strict mode.

在严格模式下,使用八进制字面量会被视为语法错误。

  • 函数中的 this 值为 undefined:
"use strict";
function showThis() {
  console.log(this);
}
showThis(); // undefined

在严格模式下,如果函数内部的 this 值未明确指定,它将保持为 undefined。

这些是严格模式下的一些限制和变化,它们有助于提高代码的可靠性和可维护性。在编写新代码或更新现有代码时,启用严格模式是一种良好的实践,可以帮助捕获潜在的错误并遵循更严格的编码标准。

以上就是详解JavaScript的严格模式的使用方法的详细内容,更多关于JavaScript的严格模式的资料请关注脚本之家其它相关文章!

相关文章

  • JavaSctit 利用FileReader和滤镜上传图片预览功能

    JavaSctit 利用FileReader和滤镜上传图片预览功能

    FileReader 对象允许Web应用程序异步读取存储在用户计算机上的文件内容,使用 File或 Blob对象指定要读取的文件或数据。下面通过本文给大家分享JavaSctit 利用FileReader和滤镜上传图片预览功能,需要的朋友参考下吧
    2017-09-09
  • 利用D3.js实现最简单的柱状图示例代码

    利用D3.js实现最简单的柱状图示例代码

    D3.js是一个基于数据操作文档JavaScript库。D3帮助你给数据带来活力通过使用HTML、SVG和CSS。D3重视Web标准为你提供现代浏览器的全部功能,而不是给你一个专有的框架。最近在学习D3.js,这个例子是通过d3.js画一个简单的柱状图。下面来一起看看吧。
    2016-12-12
  • javascript删除一个html元素节点的方法

    javascript删除一个html元素节点的方法

    这篇文章主要介绍了javascript删除一个html元素节点的方法,可通过获取父节点再查找并删除子节点来实现该功能,具有一定的参考借鉴价值,需要的朋友可以参考下
    2014-12-12
  • JavaScript对象数组排序实例方法浅析

    JavaScript对象数组排序实例方法浅析

    这篇文章主要介绍了JavaScript对象数组排序实例方法浅析的相关资料,非常不错,具有参考借鉴价值,感兴趣的朋友一起学习吧
    2016-06-06
  • JavaScript实现图像模糊化的方法实例

    JavaScript实现图像模糊化的方法实例

    这篇文章主要介绍了JavaScript实现图像模糊化的方法,文中先进行简单介绍,而后给出了完整的实例代码,有需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-01-01
  • JavaScript this指向相关原理及实例解析

    JavaScript this指向相关原理及实例解析

    这篇文章主要介绍了JavaScript this指向相关原理及实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-07-07
  • javascript 避免闭包引发的问题

    javascript 避免闭包引发的问题

    闭包的功能强大,但如果没有正确理解闭包的概念,其结果往往出乎人的意料。例如,下面是一个较常见的问题
    2009-03-03
  • Javascript 表格操作实现代码

    Javascript 表格操作实现代码

    Javascript操作表格 包括获取值,创建表格
    2009-06-06
  • uploadify在Firefox下丢失session问题的解决方法

    uploadify在Firefox下丢失session问题的解决方法

    在用uploadify上传插件时遇到了一个问题,在读session时认为没有权限而被拦截了,后来在后台打印登录时产生session的id和上传时读取session的id,解决方法如下,感兴趣的朋友可以了解下
    2013-08-08
  • 微信小程序自定义tab实现多层tab嵌套

    微信小程序自定义tab实现多层tab嵌套

    这篇文章主要为大家详细介绍了微信小程序自定义tab实现多层tab嵌套,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-07-07

最新评论