关于JavaScript中的 "use strict"

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

posted @ 2021-04-18 18:15  adamweng  阅读(87)  评论(0编辑  收藏  举报