前言

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

js中的严格模式和非严格模式的比较的更多相关文章

  1. JS严格模式和非严格模式的区别

    严格模式和非严格模式的区别 //f1.js 'use strice'; //整个js文件都是严格模式下执行的 var n = 1; var foo = function(){...}; //... v ...

  2. XCode工程中ARC模式与非ARC模式共用(转)

    Xcode 项目中经常会融合一些老的代码,它们可能采用非ARC的模式.混合编译时,就会碰到编译出错的情况. 如何共用ARC模式和非ARC模式呢? XCode除了提供整个项目是否使用ARC模式的选择外, ...

  3. stm32中阻塞模式和非阻塞模式 in blocking mode 与 in non-blocking mode区别

    阻塞模式和非阻塞模式...... 我的理解是:阻塞模式就像是一个延时函数,当这个函数没处理完那么,所有的按照流程需要执行的代码都不会被执行,要等到这个延时完成,类似 平时看书上写的LED灯闪烁,用的d ...

  4. JS-严格模式、非严格模式

    2018年11月14日晚上,我在“深入理解javascript”书上第一次知道“严格模式”“非严格模式”这2个名词: “严格模式”使用指令:“use strict”: 这个指令我其实有经常看到,在其他 ...

  5. oracle11g设置归档模式和非归档模式

    1.首先查看当前数据库是否处于归档模式            可使用如下两种方式查看 1.1  select name, log_mode from v$database;   log_mode的值为 ...

  6. Oracle之归档模式与非归档模式

    归档模式和非归档模式 在DBA部署数据库之初,必须要做出的最重要决定之一就是选择归档模式(ARCHIVELOG)或者非 归档模式(NOARCHIVELOG )下运行数据库.我们知道,Oracle 数据 ...

  7. Oracle归档模式和非归档模式的区别

    一.查看oracle数据库是否为归档模式: Sql代码1.select name,log_mode from v$database; NAME LOG_MODE ------------------ ...

  8. Oracle归档模式与非归档模式设置

    (转自:http://www.cnblogs.com/spatial/archive/2009/08/01/1536429.html) Oracle的日志归档模式可以有效的防止instance和dis ...

  9. 怎样将Oracle数据库设置为归档模式及非归档模式

    怎样将Oracle数据库设置为归档模式及非归档模式 1.Oracle日志分类 分三大类: Alert log files--警报日志,Trace files--跟踪日志(用户和进程)和 redo lo ...

  10. MySQL MHA--故障切换模式(GTID模式和非GTID模式)

    GTID和非GTID故障切换模式选择 MySQL 5.6版本引入GTID来解决主从切换时BINLOG位置点难定位的问题,MHA从0.56版本开始支持基于GTID的复制,在切换时可以采用GTID模式和非 ...

随机推荐

  1. 稍微记录下Django2.2使用MariaDB和MySQL遇到的坑

    现在演示一下整个流程吧 1.创建项目和应用 PS:你也可以使用PyCharm直接创建项目 2.注册应用 先把刚刚创建的应用添加进去 3.配置MySQL或者MariaDB 4.PyMySQL替换默认的M ...

  2. jumpserver win终端无法添加

    今天遇到一个问题是,guacd,tomcat部署完成以后jumpserver终端管理页里面还是只有coco的终端而没有guacd的终端

  3. maven deploy 指定-DaltDeploymentRepository

    运行deploy出现如下错误: deployment failed repository element was not specified in the POM inside distributio ...

  4. sk-learn 决策树的超参数

    一.参数criterion:特征选择标准,[entropy, gini].默认gini,即CART算法. splitter:特征划分标准,[best, random].best在特征的所有划分点中找出 ...

  5. 核心类生成-Mybatis Generator的使用

    总结一下Generator的使用,首先要设计好数据表,然后修改generator.xml中的配制,接着直接运行命令就可以了. 第一步:数据库设计: 生成数据表代码: /* Navicat MySQL ...

  6. tensorflow Pipeline 之TextLineReader 和decode_csv多分割替代方案

    1.TextLineReader reader = tf.TextLineReader() key, value = reader.read(filename_queue) record_defaul ...

  7. Jdk和Spring Boot版本选择

    ==========================版本选择的原则:==========================1. 优先选择官方指定的long-term support(LTS)版本, 非L ...

  8. JavaScript传递参数方法

    1.SetTimer传递参数 setTimeout(function (obj) { obj.myScroll = new IScroll('#wrapper', { click: true }); ...

  9. Echarts——一个简单的嵌套饼图

      </!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title& ...

  10. ASP.NET-SHA256加密方法

    /// <summary> /// SHA256加密 /// </summary> /// <param name="strData">< ...