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

原文地址:https://www.cnblogs.com/weiqinl/p/9563266.html

时间: 2024-10-10 07:38:47

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

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

Xcode 项目中经常会融合一些老的代码,它们可能采用非ARC的模式.混合编译时,就会碰到编译出错的情况. 如何共用ARC模式和非ARC模式呢? XCode除了提供整个项目是否使用ARC模式的选择外,还可以对单个文件添加标签来指定是否采用ARC模式. 添加标签的方法: 打开:你的target -> Build Phases -> Compile Sources. 双击对应的 *.m 文件 在弹出窗口中输入上面提到的标签-fobjc-arc / -fno-objc-arc (1)如果你的项目使用

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

(转自:http://www.cnblogs.com/spatial/archive/2009/08/01/1536429.html) Oracle的日志归档模式可以有效的防止instance和disk的故障,在数据库故障恢复中不可或缺,由于oracle初始安装模式为非归档模式,因此需要将其设置为归档模式,下面就其方法和步骤做一些总结,虽然简单,但这是管理oracle数据库必备之工,故有如下陈述. 例子是建立在windowsXP和oracle11g的环境下,如有环境不同,仅供参考. Oracle

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

1.首先查看当前数据库是否处于归档模式 可使用如下两种方式查看 1.1 select name, log_mode from v$database; log_mode的值为 NOARCHIVELOG 表示数据库处于非归档模式 log_mode的值为 ARCHIVELOG 表示数据库处于归档模式 1.2 archive log list; (此方法需要 as sysdba) Database log mode 的值为 No Archive Mode Automatic archival 的值为 D

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

1.Oracle日志分类 分三大类: Alert log files--警报日志,Trace files--跟踪日志(用户和进程)和 redo log 重做日志(记录数据库的更改). 归档日志(Archive Log)是非活动的重做日志备份.通过使用归档日志,可以保留所有重做历史记录,当数据库处于ARCHIVELOG模式并进行日志切换时,后台进程ARCH会将重做日志的内容保存到归档日志中,当数据库出现介质失败时,使用数据文件备份,归档日志和重做日志可以完全恢复数据库.在Oracle10g中,只要

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

GTID和非GTID故障切换模式选择 MySQL 5.6版本引入GTID来解决主从切换时BINLOG位置点难定位的问题,MHA从0.56版本开始支持基于GTID的复制,在切换时可以采用GTID模式和非GTID模式两种模式进行切换,如何在发生故障切换时如何判断采用哪种切换方式呢? 在MHA/MasterFailover.pm的do_master_failover方法中定义了"主库宕机"情况下的故障切换流程,其中第一步就是检查配置文件和确定故障切换模式 相关代码: my ( $server

正则表达式中的贪婪模式与非贪婪模式详解

1 概述 贪婪与非贪婪模式影响的是被量词修饰的子表达式的匹配行为,贪婪模式在整个表达式匹配成功的前提下,尽可能多的匹配,而非贪婪模式在整个表达式匹配成功的前提下,尽可能少的匹配.非贪婪模式只被部分NFA引擎所支持. 属于贪婪模式的量词,也叫做匹配优先量词,包括: “{m,n}”.“{m,}”.“?”.“*”和“+”. 在一些使用NFA引擎的语言中,在匹配优先量词后加上“?”,即变成属于非贪婪模式的量词,也叫做忽略优先量词,包括: “{m,n}?”.“{m,}?”.“??”.“*?”和“+?”.

严格模式与非严格模式

本文链接: https://lienjack.github.io/Blog/knowledge/js/3.this.html#%E4%B8%A5%E6%A0%BC-%E9%9D%9E%E4%B8%A5%E6%A0%BC%E6%A8%A1%E5%BC%8F https://www.jianshu.com/p/39e295f4526d 自执行函数 // 非严格模式: (function a() { console.log(this)//window })() ---------- // 严格模式:

贪婪模式与非贪婪模式

一.概念 1.什么是正则表达式的贪婪与非贪婪匹配 如:String str="abcaxc"; Patter p="ab*c"; 贪婪匹配:正则表达式一般趋向于最大长度匹配,也就是所谓的贪婪匹配.如上面使用模式p匹配字符串str,结果就是匹配到:abcaxc(ab*c). 非贪婪匹配:就是匹配到结果就好,就少的匹配字符.如上面使用模式p匹配字符串str,结果就是匹配到:abc(ab*c). 贪婪与非贪婪模式影响的是被量词修饰的子表达式的匹配行为,贪婪模式在整个表达式

oracle archivelog模式与非archivelog模式转换

最近集成环境出现归档日志写满后,数据库无法登录情况,询问DBA后查明情况,私下根据DBA的查找方案,拿开发环境做了一下数据库模式的切换,以便做同步监控分析问题,这里给出了数据路 首先使用dba登录,链接到数据库之后使用 sqlplus / as sysdba; archive log list 查看当前数据库归档模式,确实为归档或非归档模式之后.使用 shutdwon immediate 将数据库关闭,然后使用 startup mount 命令将数据开启处于mount状态使用 1 alter d