Js这门语言有一些奇怪的特性和一些历史遗留问题,比如with()操作,变量未声明直接使用竟然不报错,this指向到全局Object (这个老严重了,全局Object被修改那要出事啊!),其实最糟心的还是Js会直接抹去忽略这些报错。那么这事咋办呢?Js就弄了个"use strict"这个声明(statement)来进行有缺陷的历史遗留代码的修正。
"use strict"
with("xxxx") // 不准哦
在class或者modules中,严格模式是默认的!
下面就是一些在严格模式下,Js不准做的事情或者会和普通模式下有区别的地方的总结:
- with() 不准再用了,他很影响性能的。
- 如果直接在全局调用函数,this指向的是undefined 而不是全局Object了。
- eval() 不准在传入的code中声明变量、函数,而且会在里面专门构建一个Scope,用完就被抛弃。
- 如果Object被设置了non-extensible,那么添加property就会报错。
- 如果一个object的property被设置了nonwritable,那么修改、删除他的值就会报错。
- delete操作后面跟的如果是不合适的东西,比如函数、变量 那么就会报错,普通模式下会默默不做任何事情。
- 使用Object literal 来进行数组声明初始化时候如果使用相同的属性值名,那么报错。
- 函数声明时候,2个参数名字相同也会报错。
- 16进制没OX开头会报错。
- eval和arguments被当做keywords了,不能给他们赋值啥的。
- 检查调用栈的能力被限制了,arguments.caller和arguments.callee不能再用了,用了就给你报错。
参考资料:JavaScript The Definitive Guide Seventh Edition
关于JavaScript中的 "use strict"
原文:https://www.cnblogs.com/adamweng/p/14671948.html