js中的严格模式和非严格模式的比较

前言

es5的严格模式是采用具备限制性JavaScript变体的一种方式,从而使代码显示地脱离‘懒散模式/非严格模式’javascript

严格模式

  1. 严格模式经过抛出错误来消除一些原有静默错误java

  2. 严格模式修复了一些致使JavaScript引擎难以优化的缺陷:有时候,相同的代码,严格模式能够比非严格模式下运行得更快。浏览器

  3. 严格模式禁用了在ECMAScript将来版本中可能会定义的一些语法。安全

开启严格模式

在整个脚本文件或者函数体开头,写入'use strict'语句。ecmascript

将拼写错误转成异常

  1. 没法再意外建立全局变量,会抛出错误。ReferenceError.: *** is not definedide

  2. 引发静默失败的赋值操做抛出异常。 TypeError: ...函数

  3. 试图删除不可删除的属性时会抛出异常。TypeError: ...优化

  4. 要求函数的参数名惟一。SyntaxError: Duplicate parameter name not allowed in this contextthis

  5. 禁止八进制数字语法。SyntaxError: Octal literals are not allowed in strict mode.es5

  6. 禁止设置原始类型值的属性。TypeError: ...

简化变量的使用

  1. 禁用with

  2. eval再也不为上层范围引入新变量。

    在严格模式下eval仅仅为被运行的代码建立变量。因此eval不会使得名称映射到外部变量或者其余局部变量。

  3. 禁止删除声明变量。delete name在严格模式下会引发语法错误。SyntaxError: Delete of an unqualified identifier in strict mode.

evalarguments变的简单

  1. evalarguments不能经过程序语法被绑定赋值。

  2. 参数的值不会随arguments对象的值的改变而变化。

  3. 再也不支持argument.callee

“安全的”JavaScript

  1. 经过this传递给一个函数的值不会被强制转换为一个对象。

  2. 不再能经过普遍实现的ECMAScript扩展“游走于”JavaScript的栈中。

  3. 函数的参数不在提供对相应函数调用变量的访问。

为将来的ECMAScript版本铺平道路

  1. 保留了一部分字符做为关键字。好比implements,interface,let,package,private,protected,public,staticyield

  2. 禁止了不在脚本或者函数层面上的函数声明

浏览器的严格模式

主流浏览器如今实现了严格模式。可是也有大量浏览器只支持部分严格模式或者根本就不支持,因此不要盲目依赖严格模式。

参考MDN

相关文章
相关标签/搜索