JavaScript 严格模式(use strict) 功能 用法运用 详解

news/2025/3/10 20:36:15/文章来源:https://www.cnblogs.com/baisemoshui/p/18763594

JavaScript严格模式(use strict)详解

一、严格模式的概述

严格模式(Strict Mode)是JavaScript中的一种运行模式,旨在通过引入更严格的语法和行为规则,帮助开发者编写更安全、更可靠的代码。它通过在代码或函数的顶部添加"use strict";声明来启用。严格模式不仅有助于捕捉常见的编码错误,还能防止一些不安全的操作,提高代码的可维护性和安全性。

二、严格模式的功能

  1. 消除静默错误

    • 在严格模式下,JavaScript会抛出更多的错误,而不是静默地忽略它们。例如,未声明的变量赋值会导致ReferenceError,而不是默默地创建全局变量。
  2. 阻止不安全的操作

    • 严格模式禁止了一些可能导致安全问题的操作,如删除不可删除的属性、使用eval()执行外部代码等。
  3. 改变函数行为

    • 在严格模式下,函数的行为会发生一些变化。例如,arguments对象与函数参数之间的关联更加紧密,对arguments的修改会反映到对应的参数上,反之亦然。
  4. 提高代码质量

    • 通过引入更严格的规则,严格模式有助于开发者编写更清晰、更易于维护的代码。它鼓励开发者遵循最佳实践,减少潜在的错误和漏洞。

三、严格模式的用法

  1. 全局启用严格模式

    • 要在整个JavaScript文件中启用严格模式,可以在文件的第一行添加"use strict";声明。这样,该文件中的所有代码都将以严格模式运行。

      "use strict";
      // 严格模式下的代码
      
  2. 局部启用严格模式

    • 也可以在特定的函数内部启用严格模式,只需在函数体的第一行添加"use strict";声明。这样,只有该函数内部的代码会以严格模式运行。

      function myFunction() {"use strict";// 严格模式下的代码
      }
      

四、严格模式的具体限制和改变

  1. 变量声明

    • 在严格模式下,变量必须先声明后使用。未声明的变量赋值会导致ReferenceError

    • 示例:

      "use strict";
      x = 10; // ReferenceError: x is not defined
      
  2. 删除操作

    • 严格模式禁止删除变量、函数、函数参数或arguments对象。尝试进行这些删除操作会导致TypeError

    • 示例:

      "use strict";
      var x = 10;
      delete x; // TypeError: Cannot delete variable x
      
  3. 函数参数

    • 严格模式不允许函数参数名重复。如果参数名重复,会导致SyntaxError

    • 示例:

      "use strict";
      function sum(a, a) {return a + a;
      }
      // SyntaxError: Duplicate parameter name not allowed in this context
      
  4. eval()函数

    • 在严格模式下,eval()创建的变量不会泄漏到包含它的作用域之外,也不会修改外部作用域中的变量。
  5. with语句

    • 严格模式禁用了with语句,因为它可能导致代码难以理解和优化。

    • 示例:

      "use strict";
      var obj = { a: 1 };
      with (obj) {a = 2; // SyntaxError: Strict mode code may not include a with statement
      }
      
  6. 八进制字面量

    • 严格模式禁止了八进制字面量(如015),因为它们容易导致混淆和错误。

    • 示例:

      "use strict";
      var num = 010; // SyntaxError: Octal literals are not allowed in strict mode
      
  7. this

    • 在严格模式下,未指定this值的函数(如非方法函数)在调用时thisundefined,而不是全局对象(在浏览器中通常是window)。
  8. 保留关键字

    • 严格模式新增了一些保留关键字,如implementsinterfaceletpackageprivateprotectedpublicstaticyield等。这些关键字在某些情况下会有更多的限制,不允许作为变量或函数名。

五、使用严格模式的注意事项

  1. 兼容性

    • 严格模式是ECMAScript 5(ES5)引入的特性,因此需要在支持ES5及更高版本的JavaScript环境中运行。大多数现代浏览器都支持严格模式。
  2. 性能影响

    • 严格模式增加了一些额外的检查和限制,可能会导致一些代码的性能略有下降。然而,这种性能影响通常是可以接受的,特别是在开发阶段和代码质量至关重要的情况下。
  3. 代码测试

    • 在将严格模式应用于现有项目时,建议对代码进行充分的测试,以确保严格模式不会引入新的问题或错误。

六、总结

严格模式是JavaScript中的一种重要特性,它通过引入更严格的语法和行为规则,帮助开发者编写更安全、更可靠的代码。在使用严格模式时,需要了解其功能和限制,并遵循最佳实践来编写高质量的代码。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/896961.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

征程 6 工具链 BEVPoolV2 算子使用教程 【2】-BEVPoolV2 QAT 链路实现示例

1.引言 在上一篇帖子中,我们已详尽阐述了 BEVPoolV2 相较于 BEVPoolV1 的改进之处,并对 BEVPoolV2 实现的代码进行了解析。想必大家对 BEVPoolV2 算子的功能及实现已有了一定程度的理解,此篇帖子将展示 征程 6 工具链 BEVPoolV2 单算子 QAT 链路的实现范例,以进一步增进用户…

包装类--java进阶day05

1.包装类比如要让s+100,输出223.如果直接相加,结果是123100,这时就可以将s转换为包装类,然后再用包装类进行相加 2.包装类类型3.手动拆/装箱 我们这里只介绍Integer,其他包装类都是一个模板 第一个方式已经过时,不建议使用.4.自动拆/装箱.5.包装类常用方法 可以直接类名调…

掌握这些 UI 交互设计原则,提升产品易用性

在当今数字化时代,用户对于产品的体验要求越来越高,UI 交互设计成为决定产品成败的关键因素之一。一个易用的产品能够让用户轻松、高效地完成各种操作,而实现这一目标的核心在于遵循一系列科学合理的 UI 交互设计原则。本文将详细阐述简洁性、一致性、反馈、可访问性以及用户…

C++ this

今天开始进入C++学习了,之前的这周末复习下 侧重与底层原理 当把函数放到结构体里面,编译器会帮我们传递一个参数:结构体的地址this指针本质就是对象地址

【由技及道】镜像星门开启:Harbor镜像推送的量子跃迁艺术【人工智障AI2077的开发日志010】

当构建产物需要穿越多维宇宙时,当Docker镜像要同时存在于72个平行世界——这就是镜像推送的量子艺术。本文记录一个未来AI如何通过Harbor建立镜像星门,让每个构建产物都能瞬间抵达所有维度。![量子镜像跃迁示意图]( 摘要:当构建产物需要穿越多维宇宙时,当Docker镜像要同时存…

构造矩形

构造矩形 题目描述 现有 \(n\) 条长度为 \(m\) 的线段,垂直于 x 轴分布,且互不重合。第 \(i\) 条线段的两个端点均为整数点,分别为 \((a_i, 0)\) 和 \((a_i, m)\)。每条线段上有 \(m+1\) 个整数点,纵坐标分别为 \(0, 1, 2, …, m\)。 现在,你需要选择两条不同的线段,并在…

Llama 4 即将发布,引入语音能力;AI 智能运动眼镜 BleeqUp:实时对讲、AI 自动成片等功能丨日报

开发者朋友们大家好:这里是 「RTE 开发者日报」 ,每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享 RTE(Real-Time Engagement) 领域内「有话题的 技术 」、「有亮点的 产品 」、「有思考的 文章 」、「有态度的 观点 」、「有看点的 活动 」,但内容仅代表编辑…

BigDecimal类--java进阶day05

1.BigDecimal出现的原因2.BigDecimal的创建不推荐第一种形式,会有误差第二种方式创建对象第三种方式调用方法2.BigDecimal常用方法除法的特殊事项 如果有除不尽的情况,常规的除法会出现问题divide的另一种方法 divide还有一个重载方法,可以解决除不尽的问题舍入模式中,进一…

3.10 学习记录

实现了员工页面的前端代码实现点击查看代码 <script setup> import { ref, onMounted } from vue import axios from axiosconst searchEmp = ref({name: ,gender: ,job: , })onMounted(() => {search(); })const search = async () => {const url = `https://web-…

transformer 中的掩码类型

知识是我们已知的也是我们未知的基于已有的知识之上我们去发现未知的由此,知识得到扩充我们获得的知识越多未知的知识就会更多因而,知识扩充永无止境

如何设计、维护和推广 API:专业人士的实用指南

API 在今天的数字化环境中扮演着至关重要的角色,它们作为系统和应用程序之间的连接纽带。对于公司而言,打造用户喜爱的 API、有效地维护它们并成功地在内部和外部推广,不仅能提高数字价值,还能带来巨大的业务收益。 API 设计是创建一个标准化、易于理解且稳定的应用程序接口…

springboot引入nacos

springboot引入nacos 一、 环境准备(windows为例)安装nacos(github镜像网址:Releases alibaba/nacos) 推荐下载发行版启动nacos本地服务 下载完毕,建议解压到没有中文路径的文件夹,在bin目录下打开cmd对话框输入下面命令启动nacos startup.cmd -m standalone启动成功出现以…