js中的严格模式和非严格模式的比较
2018-08-30 23:05
477 查看
前言
es5的严格模式是采用具有限制性JavaScript变体的一种方式,从而使代码显示地脱离‘懒散模式/非严格模式’严格模式
严格模式通过抛出错误来消除一些原有静默错误严格模式修复了一些导致JavaScript引擎难以优化的缺陷:有时候,相同的代码,严格模式可以比非严格模式下运行得更快。
严格模式禁用了在ECMAScript未来版本中可能会定义的一些语法。
开启严格模式
在整个脚本文件或者函数体开头,写入'use strict'语句。
将拼写错误转成异常
无法再意外创建全局变量,会抛出错误。ReferenceError.: *** is not defined
引起静默失败的赋值操作抛出异常。
TypeError: ...
试图删除不可删除的属性时会抛出异常。
TypeError: ...
要求函数的参数名唯一。
SyntaxError: Duplicate parameter name not allowed in this context
禁止八进制数字语法。
SyntaxError: Octal literals are not allowed in strict mode.
禁止设置原始类型值的属性。
TypeError: ...
简化变量的使用
禁用with
eval不再为上层范围引入新变量。
在严格模式下
eval仅仅为被运行的代码创建变量。所以
eval不会使得名称映射到外部变量或者其他局部变量。
禁止删除声明变量。
delete name在严格模式下会引起语法错误。
SyntaxError: Delete of an unqualified identifier in strict mode.
让eval
和arguments
变的简单
eval和
arguments不能通过程序语法被绑定赋值。
参数的值不会随
arguments对象的值的改变而变化。
不再支持
argument.callee
“安全的”JavaScript
通过this传递给一个函数的值不会被强制转换为一个对象。
再也不能通过广泛实现的ECMAScript扩展“游走于”JavaScript的栈中。
函数的参数不在提供对相应函数调用变量的访问。
为未来的ECMAScript版本铺平道路
保留了一部分字符作为关键字。比如implements,
interface,
let,
package,
private,
protected,
public,
static和
yield
禁止了不在脚本或者函数层面上的函数声明
浏览器的严格模式
主流浏览器现在实现了严格模式。但是也有大量浏览器只支持部分严格模式或者根本就不支持,所以不要盲目依赖严格模式。参考MDN
相关文章推荐
- JS的解析顺序和作用域(严格模式)
- js 严格模式
- 什么是js严格模式?
- 浅谈js严格模式 use strict
- JS的解析顺序和作用域(严格模式)
- js严格模式
- js严格模式
- JS的解析顺序和作用域(严格模式)
- 你知道的,javascript语言的执行环境是"单线程模式",这种模式的好处是实现起来比较简单,执行环境相对单纯;坏处是只要有一个任务耗时很长,后面的任务都必须排队等着,会拖延整个程序的执行,因此很多时候需要进行“异步模式”,请列举js异步编程的方法。
- 浅谈js的解析顺序 作用域 严格模式
- js严格模式总结(分享)
- js(十)---类数组和严格模式
- js严格模式——arguments变为参数的静态副本
- js严格模式
- js严格模式“use strict”
- JS中的“use strict” 严格模式
- js严格模式
- 深入浅析JS中的严格模式
- js 严格模式
- Js中严格模式和非严格模式的区别