js中的严格模式和非严格模式的比较
前言
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
禁止了不在脚本或者函数层面上的函数声明
浏览器的严格模式
主流浏览器现在实现了严格模式。但是也有大量浏览器只支持部分严格模式或者根本就不支持,所以不要盲目依赖严格模式。
js中的严格模式和非严格模式的比较的更多相关文章
- JS严格模式和非严格模式的区别
严格模式和非严格模式的区别 //f1.js 'use strice'; //整个js文件都是严格模式下执行的 var n = 1; var foo = function(){...}; //... v ...
- XCode工程中ARC模式与非ARC模式共用(转)
Xcode 项目中经常会融合一些老的代码,它们可能采用非ARC的模式.混合编译时,就会碰到编译出错的情况. 如何共用ARC模式和非ARC模式呢? XCode除了提供整个项目是否使用ARC模式的选择外, ...
- stm32中阻塞模式和非阻塞模式 in blocking mode 与 in non-blocking mode区别
阻塞模式和非阻塞模式...... 我的理解是:阻塞模式就像是一个延时函数,当这个函数没处理完那么,所有的按照流程需要执行的代码都不会被执行,要等到这个延时完成,类似 平时看书上写的LED灯闪烁,用的d ...
- JS-严格模式、非严格模式
2018年11月14日晚上,我在“深入理解javascript”书上第一次知道“严格模式”“非严格模式”这2个名词: “严格模式”使用指令:“use strict”: 这个指令我其实有经常看到,在其他 ...
- oracle11g设置归档模式和非归档模式
1.首先查看当前数据库是否处于归档模式 可使用如下两种方式查看 1.1 select name, log_mode from v$database; log_mode的值为 ...
- Oracle之归档模式与非归档模式
归档模式和非归档模式 在DBA部署数据库之初,必须要做出的最重要决定之一就是选择归档模式(ARCHIVELOG)或者非 归档模式(NOARCHIVELOG )下运行数据库.我们知道,Oracle 数据 ...
- Oracle归档模式和非归档模式的区别
一.查看oracle数据库是否为归档模式: Sql代码1.select name,log_mode from v$database; NAME LOG_MODE ------------------ ...
- Oracle归档模式与非归档模式设置
(转自:http://www.cnblogs.com/spatial/archive/2009/08/01/1536429.html) Oracle的日志归档模式可以有效的防止instance和dis ...
- 怎样将Oracle数据库设置为归档模式及非归档模式
怎样将Oracle数据库设置为归档模式及非归档模式 1.Oracle日志分类 分三大类: Alert log files--警报日志,Trace files--跟踪日志(用户和进程)和 redo lo ...
- MySQL MHA--故障切换模式(GTID模式和非GTID模式)
GTID和非GTID故障切换模式选择 MySQL 5.6版本引入GTID来解决主从切换时BINLOG位置点难定位的问题,MHA从0.56版本开始支持基于GTID的复制,在切换时可以采用GTID模式和非 ...
随机推荐
- pre的内容自动转行
使pre的内容自动换行(转) <pre> 元素可定义预格式化的文本.被包围在 pre 元素中的文本通常会保留空格和换行符.而文本也会呈现为等宽字体. <pre> 标签的一个常见 ...
- k8s list
https://mp.weixin.qq.com/s?__biz=MzI5ODQ2MzI3NQ==&mid=2247486341&idx=1&sn=53b0c92deb0cb8 ...
- 攻防常用命令(linux)
1.修改SSH密码: #登录SSH passwd 出现current passwoed或new password 输入就密码再输入新密码确认或直接输入新密码确认即可 2.修改Mysql密码: 1.在m ...
- C#使用WindowsMediaPlayer实现视频播放
using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using Sy ...
- cenos7上部署python3环境以及mysqlconnector2.1.5
本机的python2不要管他,因为可能有程序依赖目前的python2环境,比如yum!!!!! 一.安装python3依赖环境: yum -y install zlib-devel bzip2-dev ...
- SQL随记(四)
1.for loop 循环 格式:for index in lower .. upper loop end loop; for i in 1 .. g_descTbl.count loop if ( ...
- Apache Hadoop 2.9.2 的集群管理之服役和退役
Apache Hadoop 2.9.2 的集群管理之服役和退役 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 随着公司业务的发展,客户量越来越多,产生的日志自然也就越来越大来,可能 ...
- sass补充(2019-3-9)
@each 输出 格式: @each $var in value,value1,value2{ } eg: @each $var1 in 100px,200px,300px{ .box{ width: ...
- [Android] Android 使用 FragmentTabHost + Fragment 实现 微信 底部菜单
Android 使用 FragmentTabHost + Fragment 实现 微信 底部菜单 利用FragmentTabHost实现底部菜单,在该底部菜单中,包括了4个TabSpec,每个TabS ...
- ArcGIS Editor for Open Street Map 10.X for Desktop下载地址
ArcGIS Editor for Open Street Map可用于导入从OSM下载的地图,但并不是ArcGIS自带的工具,需要从官网下载,虽然文件很小,但下载速度较慢,易断开. 在此为找不到或不 ...