严格模式
本文最后更新于:1 天前
什么是严格模式
严格模式是在 ECMAScript5(ES5)中引入的,在严格模式下,JavaScript 对语法的要求会更加严格,一些在正常模式下能够运行的代码,在严格模式下将不能运行。
添加严格模式,主要有以下几个目的:
- 消除 JavaScript 语法中一些不合理、不严谨的地方;
- 消除代码中一些不安全的地方,保证代码的安全运行;
- 提高 JavaScript 程序的运行效率;
- 为以后新版本的 JavaScript 做好铺垫。
将过失错误转成异常
- 严格模式下无法再意外创建全局变量
直接写一个变量a=1
,在宽松模式下,浏览器会帮我们定义一个全局变量,但是这样的行为太出格了,所以严格模式下,此类行为均认为是异常错误。 - 静默失败的操作都会抛出异常
诸如修改不可写属性,删除不可删除属性,给全局属性进行无意义的赋值此类的行为虽然是错误的行为,但是浏览器不会显性抛出错误,在严格模式下,此类行为全部会抛出异常。 - 函数参数重复会被当做异常抛出
使用严格模式后重复参数会抛出以下错误,Uncaught SyntaxError: Duplicate parameter name not allowed in this context
而在宽松模式下,是不会报错的。 - 0开头的八进制写法被禁止
使用0开头的诸如0644
此类的进制写法都会被严格模式认为错误,想要表达八进制,在es6中提供了以0o
开头的的表达形式,如0o640
。 - 原始类型数据的属性不能被赋值
诸如给数字的某个属性赋值的操作,在严格模式下是不被允许的(12).hello = 0
- with被禁用
这玩意就该被禁用,不确定的代码使用with太危险了。 - 禁止删除声明变量
声明的变量不能直接删除 - arguments内部的值不会随使用的改变而改变,arguments.callee不可使用
"use strict"; function test(a,b,c){ a=1;b=2;c=3 console.log(a,b,c,arguments) } test(4,5,6)//输出1,2,3,[4,5,6,callee] function test2(){ console.log(arguments.callee) } test2()//TypeError: 'caller', 'callee', and 'arguments' properties may not be accessed on strict mode functions or the arguments objects for calls to them
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!