JavaScript 严格模式


JavaScript被设计为能使新人开发者更易于上手, 所以有时候会给本来错误操作赋予新的不报错误的语义(non-error semantics). 有时候这可以解决当前的问题, 但有时候却会给以后留下更大的问题. 严格模式则把这些失误当成错误, 以便可以发现并立即将其改正.

开启严格模式

在需要开启严格模式的函数或者文本中传入特定语句'use strict'(或者"use strict")即可开启严格模式

  1. 为整个脚本开启
    'use strict'
    var strict='I am a strict mode';
    
  2. 为函数开启
    function strict(){
    	'use strict'
    	console.log('I am a strict mode function');
    }
    

严格模式的变化

一、无法意外创建全局变量,利用抛出错误代替,普通JavaScript中会创建并继续执行:

	'use strict'
	avaliable=3
	console.log(avalible)

运行上述代码,控制台抛出错误

  Uncaught ReferenceError: avaliable is not defined

普通模式则创建,并打印

二、引起静默失败(不报错也不产生效果的错误),在普通模式下会不处理,但是在严格模式下会抛出错误,例如 undefined 是全局中的一个变量,在普通模式下给undefined赋值,不会产生错误,也不会对改变undefined的值

	//'use strict'
	undefined=3
	console.log(undefined)//控制台打印undefined

使用严格模式,控制台抛出错误

  Uncaught TypeError: Cannot assign to read only property ‘undefined’ of object ‘#’

三、严格模式下试图删除不可删除属性时抛出错误

在JavaScript 中,delete 用于删除对象中的某个属性值,其返回值均为 True 当删除属性为不可删除属性时,非严格模式返回false ,严格模式抛出错误

	'use strict'//不使用不报错
	delete Object.prototype;
	//抛出错误
	//test.html:14 Uncaught TypeError: Cannot delete property 'prototype' of function Object() //{ [native code] }
	

四、要求函数参数名唯一,在普通模式,函数参数名存在两个时,后边个会覆盖前边个变量,但是严格模式下被认为为意料之外的情况(例如写错)抛出错误

// 'use strict'
function sum(a,a,b){
    console.log(a+a+b)
}
sum(1,2,3)//非严格模式打印7  2+2+3

使用严格模式,抛出错误

  Uncaught SyntaxError: Duplicate parameter name not allowed in this context

浏览器的严格模式

主流浏览器都支持严格模式,但是仍有一部分浏览器不支持,严格模式改变了语义,在使用时需注意兼容性问题。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值