JS的严格模式

这篇具有很好参考价值的文章主要介绍了JS的严格模式。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

JavaScript的严格模式(Strict Mode)是一种在代码中启用的特殊模式,用于提供更严格的语法和错误检查,以改善代码质量和增强安全性。使用严格模式可以帮助大家避免一些常见的错误,并禁用一些不推荐使用的特性。

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

"use strict";

 

 

 

 

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

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

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

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

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

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

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

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

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

 

 

 

 

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

1. 变量必须先声明后使用:

"use strict";

x = 10; // 抛出 ReferenceError: x is not defined

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

 

 

2. 禁止删除变量:

"use strict";

var x = 10;
delete x; // 抛出 SyntaxError: Delete of an unqualified identifier in strict mode.

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

 

 

3. 禁止对只读属性进行赋值:

"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>'

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

 

 

4. 八进制字面量的限制:

"use strict";

var num = 012; // 抛出 SyntaxError: Octal literals are not allowed in strict mode.

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

 

 

5. 函数中的 this 值为 undefined:

"use strict";

function showThis() {
  console.log(this);
}

showThis(); // undefined

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

 


这些是严格模式下的一些限制和变化,它们有助于提高代码的可靠性和可维护性。在编写新代码或更新现有代码时,启用严格模式是一种良好的实践,可以帮助捕获潜在的错误并遵循更严格的编码标准。文章来源地址https://www.toymoban.com/news/detail-465451.html

到了这里,关于JS的严格模式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C++(12) 模板类、模板继承(严格模式和自由模式)

    模版类 1. 模版类 2. 模版参数限制 双重限制 限制外部类型 限制模版类型 3. 模版继承 3.1 严格模式 3.2 自由模式 4. 模版类的模版函数 5. 返回值类型带有模版

    2024年02月22日
    浏览(34)
  • react的严格模式 和 解决react useEffect执行两次

    这个问题,主要是刚接触react的时候发的问题,当时也没总结。现在回过头来再总结一次!!! 能发现这个问题的👨‍🎓,一定是一名细心并且有一颗求知的❤️。 因为我当时接触React的时候就是这样的想法。 为什么会触发两次?按照正常的声明周期应该执行一次的!!!

    2024年02月04日
    浏览(30)
  • 【ES5新特性一】 严格模式语法变化、全局的JSON对象、编码和解码的方法

    ECMAScript 和 JavaScript 的关系 一个常见的问题是,ECMAScript 和 JavaScript 到底是什么关系? 要讲清楚这个问题,需要回顾历史。1996 年 11 月, JavaScript 的创造者 Netscape 公司 ,决定将 JavaScript 提交给标 准化组织 ECMA ,希望这种语言能够成为国际标准。次年,ECMA 发布 262 号标准文件

    2024年02月11日
    浏览(29)
  • hive 动态分区-动态分区数量太多也会导致效率下降&只设置非严格模式也能执行动态分区

    在非严格模式下 不开启动态分区 的功能的参数(配置如下),同样也能进行动态分区数据写入,目测原因是不严格检查SQL中是否指定分区或者多分区。 动态分区数量太多也会导致效率下降 ,合理设置分区数,可以提高任务执行效率。 背景 目前所使用的集群规模3000c+20TB+3

    2024年02月11日
    浏览(28)
  • BO(Business Object)是一种用于表示业务对象的设计模式

    BO是 Business Object 的缩写,是一种用于表示业务对象的设计模式。在Java中,BO的主要作用是 封装业务逻辑 ,实现业务流程的可重用性和可维护性。 BO主要有以下几个作用: 实现业务逻辑的封装:将业务逻辑封装在BO对象中,可以方便地对业务逻辑进行管理和维护,实现业务流

    2024年02月05日
    浏览(42)
  • 从星巴克看:NFT不仅仅是一种数字资产,更代表着一种全新的交互模式

    品牌方不应将数字化的生意局限在NFT收藏品上,更需另辟蹊径,比如说粉丝通证。“粉丝通证与其说是一个概念,更准确的描述一种运营系统,而任何以此为基础进行的活动都是只是一种实现方式。如果发行的品牌方有强大影响力或者‘信心’,那么发售一款NFT收藏品是最简

    2024年02月11日
    浏览(42)
  • MaaS(Model as a Service)是一种云计算模式,它提供了一种将机器学习模型作为服务的方式

    MaaS(Model as a Service)是一种云计算模式,它提供了一种将机器学习模型作为服务的方式。MaaS允许用户在不需要拥有自己的硬件设备或专业技能的情况下,使用高质量的机器学习算法和模型。MaaS已经成为了人工智能和机器学习领域的热门趋势之一,对多个行业产生广泛的影响

    2024年04月17日
    浏览(34)
  • 专用 API 网关是一种典型的云计算服务架构模式,它可以让公司内不同部门之间的 API 服务更加集中、更加安全、更加统一

    作者:禅与计算机程序设计艺术 API Gateway(以下简称“网关”)是微服务架构中的一个重要组件。它作为边缘服务层与其他业务系统进行交互的桥梁,负责处理外部请求、安全认证、限流、熔断降级等工作。 在过去的几年中,随着容器技术的普及和Kubernetes等容器编排工具的

    2024年02月03日
    浏览(34)
  • Nginx Proxy!一种在 Nginx 中实现反向代理的技术

    Nginx Proxy 代理是一种在 Nginx 中实现反向代理的技术 ,它可以将Nginx Proxy 代理是一种在 Nginx 中实现 反向代理 的技术,它可以将客户端的请求转发到后端服务器,并将后端服务器的响应返回给客户端。Nginx Proxy 代理在 Web 应用程序部署、负载均衡和安全等方面 具有广泛的应用

    2024年01月20日
    浏览(42)
  • 一种在 Python 中实现更快 OpenCV 视频流的多线程方法

    概述 在本文中,我们将看到两个没有多线程的 Python 代码示例,用于从摄像头读取视频帧。我们将看到使用/不使用多线程获得的 FPS 的差异。 什么是多线程? 线程是进程中的一个执行单元。多线程是指通过在线程之间快速切换对 CPU 的控制(称为上下文切换)来并发执行多个

    2024年02月16日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包