zoukankan      html  css  js  c++  java
  • js中的严格模式和非严格模式的比较

    前言

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

    严格模式

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

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

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

    开启严格模式

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

    将拼写错误转成异常

    1. 无法再意外创建全局变量,会抛出错误。ReferenceError.: *** is not defined

    2. 引起静默失败的赋值操作抛出异常。 TypeError: ...

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

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

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

    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

  • 相关阅读:
    如何还原Microsoft Office Word 2003默认的Normal.dot模板文件
    如何解决VMware Workstation 10.0.0 build-1295980马赛克现象
    通过更改注册表信息来恢复Microsoft Office 2003默认设置
    在运行Eclipse时明确指定要使用的Java VM
    修改Eclipse启动图像
    Get IPv4 Address 1.0
    hosts appender 2.0
    Extract String From Text 1.0
    String Replace 1.0
    360 Extension for Chrome Download 1.0
  • 原文地址:https://www.cnblogs.com/weiqinl/p/9563266.html
Copyright © 2011-2022 走看看