世界新动态:JS的严格模式

2023-05-31 11:03:47 来源:博客园

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

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

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。

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

标签

郴州安仁文旅项目集中开工 总投资1000万元

3月16日,安仁县举行文旅项目集中开工活动,县委书记王洪灿在开工仪式上宣布:湘南起义旧址群——朱毛井...

2022-03-20 15:40:46

2022年郴州计划重点推进文旅项目101个 总投资354亿元

3月16日,我市举行全市文旅项目和城市大提质大融城项目集中开工仪式,市委书记吴巨培宣布项目开工。郴州...

2022-03-20 15:39:41

宿州泗县深入推进文旅融合发展 擦亮城市品牌

近年来,泗县以争创安徽省文化旅游名县为目标,深入推进文旅融合发展,努力擦亮水韵泗州 运河名城城市...

2022-03-20 15:38:59

汽车零部件产业“领头羊” 锦州力争一季度“开门红”

3月16日,记者从锦州汽车零部件产业的领头羊——锦州万得集团获悉,今年前两个月,企业订单充足,正铆足...

2022-03-20 15:37:41

油价或有望冲击“九元”大关 宁波新能源汽车市场如何

新一轮国内成品油调价窗口于3月17日24时开启,油价或有望冲击九元大关。前一天晚上11点,鄞州区不少加油...

2022-03-20 15:34:38

从水塘到“云”端 全国最大高邮鸭养殖基地实现智慧养殖

随着新一代数字技术的蓬勃发展,以新兴技术推动现代化新农村建设正成为助力乡村振兴的重要手段。1个人能...

2022-03-20 15:33:17

淡季不忘引流 京郊民宿市场有望迎来回暖

旅游淡季中的京郊民宿有望成为市场中最先复苏的板块。3月17日,北京商报记者调查发现,虽然正值旅游淡季...

2022-03-20 15:32:01

镇江乡村一二三产业融合发展 闯出“镇江之路”

从烹饪江鲜河豚的个体小饭店到规模化的江岛乡村旅游产业集群,从白兔草莓丁庄葡萄的单个农户种植到茅山...

2022-03-20 15:31:11

总投资30亿元 盐城东台8个重大产业项目相继开工

总投资30亿元的精密电子元器件项目、同益电子项目,总投资10亿元的金利美精密组件项目、天永智能设备项...

2022-03-20 15:30:13

去年南京规上信息软件业企业实现营收7577.28亿元 同比增长10.3%

市统计局最新统计数据显示,2021年,我市规模以上信息软件业企业共1662家,较上年同期增加321家,实现营...

2022-03-20 15:28:57
x 广告
x 广告

Copyright  2015-2022 东方粮油网版权所有  备案号:沪ICP备2020036824号-8   联系邮箱:562 66 29@qq.com