JS的严格模式

严格模式是JavaScript的一个增强模式,旨在提高代码质量并减少错误。它不允许某些在非严格模式下可能引发问题的操作,如删除不可删除的属性、重名属性和参数。在严格模式下,变量、对象和函数的行为都会有所不同,例如,开启严格模式需在代码顶部添加特定字符串,且严格模式下,函数参数必须唯一,不能通过`delete`操作删除不可删除的属性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

严格模式是什么

严格模式是JavaScript中的一种限制性更强的变种方式。严格模式不是一个子集:它在语义上与正常代码有着明显的差异。

不支持严格模式的刘览器与支持严格模式的浏览器行为上也不一样,所以不要在未经严格模式特性测试情况下使用严格模式。

严格模式可以与非严格模式共存,所以脚本可以逐渐的选择性加入严格模式。

目的

首先,严格模式会将JavaScript陷阱直接变成明显的错误。

其次,严格模式修正了一些引擎难以优化的错误:同样的代码有些时候严格模式会比非严格模式下更快。

第三,严格模式禁用了一些有可能在未来版本中定义的语法。

在变量中的严格模式

开启严格模式

在JavaScript中想要开启严格模式,需要在所有代码之前,定义一个不会赋给任何变量的字符串:

"use strict";//或者'use strict';

如果之前的JavaScript代码是非严格模式的话,建议还要盲目为这段代码开启严格模式,这样可能会出现问题。建议按一个个函数去开启严格模式(至少在学习的过渡期要这样做)。

function fn(){
    // 开启严格模式 - 局部作用域
    'use strict';
    var a = 200;
    console.log(a);
}

fn();

在对象中的严格模式

不可删除的属性

在严格模式下,不能使用delete运算符删除不可删除的属性。

如下代码是非严格模式下使用delete运算符删除不可删除的属性,结果会静默失败。

delete Object.prototype;

如下代码是严格模式下使用delete运算符符删除不可删除的属性,结果会抛出异常。

"use strict";//开启严格模式
delete Object.prototype;//抛出TypeError错误

属性名必须唯一

在严格模式下,一个对象内的所有属性名在对象内必须唯一。

如下代码是非严格模式下重名属性是允许的,最后一个重名的属性决定其属性值。

var o = {p:1, p: 2} ;

如下代码是严格模式下重名属性被认为是语法错误。

"use strict";//开启严格模式
var o = {p:1, p:2};//!!!语法错误

在函数中的严格模式

参数名必须唯一

在严格模式下,要求命名函数的参数必须唯一。

如下代码是非严格模式下最后一个重名参数名会掩盖之前的重名参数,之前的参数仍然可以通过arguments[ i ]来访问。

function sum(a, a, c){ }

如下代码是严格模式下重名参数被认为是语法错误。

function sum(a, a, c) {//!!!语法错误
	"use strict";
	return a + a + c;//代码运行到这里会出错
}

arguments的不同

  • 在严格模式下,arguments对象的行为也有所不同。
  • 非严格模式下,修改命名参数的值也会反应到arguments对象中。严格模式下,命名参数与arguments对象是完全独立的。
function showvalue( value ){
    value = "foo";
    console.log(value);// foo
    console.log( arguments[0] );//非严格模式下foo
    				//严格模式下hello
}
showvalue("hello");
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值