ECMAScript5之StrictMode
ECMAScript5引入一个严格模式的概念(Strict Mode)。
它的作用就是不让Javascript的容错那么高,让我们对编写代码的规范要求高一点。
比如,当我们使用严格模式编写JavaScript代码时,我们不能隐式的申明变量,必须带var。
那怎么使用严格模式(Strict Mode)呢?
当我们想让代码启动严格模式(Strict Mode)时,我们可以在代码的开头或者函数function的开头中添加”use strict”。
倘若我们在整个代码中启用严格模式(Strict Mode),那么所有代码都必须遵循严格模式的规范;
倘若我们在一个function中启用,那么只在这个function中,得遵循严格模式的规范。
我们一起来写个demo,体验体验下。
<!DOCTYPE html>
<head>
<title>strict mode</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
</head>
<body>
<script>
//启用严格模式
"use strict";
function testFunction(){
var testvar = 4;
return testvar;
}
//This causes a syntax error.
testvar = 5;
</script>
</body>
</html>
在上面的demo中,我在整个代码中启用严格模式,但我在function的外部声明变量时,没有加var,因此不符合严格模式规范,所以运行代码时会报错。

哈,有点意思。
刚才我们是在整个代码中启用严格模式,下面我们再来写个demo,在function里启用严格模式。
<!DOCTYPE html>
<head>
<title>strict mode</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
</head>
<body>
<script>
function testFunction(){
"use strict";
testvar = 4;
return testvar;
}
testvar = 5;
</script>
</body>
</html>
打开chrome调试器:

纳尼!!怎么没有报错?!!
我们再看看上面的代码,哈哈哈,原来是我们没有调用testFunction嘛,既然没执行它,它怎么会启用严格模式呢?
修改代码如下:
<!DOCTYPE html>
<head>
<title>strict mode</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
</head>
<body>
<script>
function testFunction(){
"use strict";
testvar = 4;
return testvar;
}
//调用testFunction
testFunction();
testvar = 5;
</script>
</body>
</html>
再看看chrome结果:

哇咔哇咔,严格模式还是挺严格的嘛,如果我们在写代码中,想启用的严格模式,那就得注意咯。
下面列举了在严格模式下的几个重点限制:
|
JavaScript |
限制 |
例子 |
|
变量 |
使用一个变量,但是没有用var去声明 |
testvar = 4; |
|
delete |
删除一个变量,函数或者agrument |
var testvar = 15; function testFunc(){} //causes fault delete testvar; delete testFunc; |
|
属性名 |
在声明对象时,重复使用一个属性名 |
var testObj = { prop1: 10, prop2: 15, //causes fault prop1: 20 } |
|
参数名 |
在函数参数中,重复使用一个参数名 |
function testFunc(param1,/*causes fault*/param1){ return 1; } |
|
有潜力成为关键字 |
在未来有可能成为有用的关键字,不能用来作为变量名或者函数名 |
implements interface package private protected public static yield |
|
八进制数 |
将八进制数赋给一个变量 |
var testoctal = 010; var testescape = \010; |
|
this |
当this为null或者undefined的时候,它是不能被转换成全局对象(window)的 |
function testFunc(){ return this; } var testvar = testFunc(); 在不是严格模式下,这个testvar的值是全局对象,但在严格模式下,它的值却是undefined. |
|
eval,arguments |
eval,arguments不能作为函数名或者参数名、变量名 |
var eval = 10; var arguments =10; |
|
arguments |
在函数中,我们不能通过改变arguments,来改变对应参数值 |
function testArgs(oneArg){ arguments[0] = 20; } 在非严格模式下,我们如果想改变oneArg,可以通过Arguments[0]来改变,如上代码这样,执行后,oneArg和Arguments[0]的值都是20;但是在严格模式下,我们不能通过arguments来改变参数名的值,arguments仅仅是一个拷贝而已。 |
|
arguments.callee |
不允许这么使用 |
function(testInt){ if(testInt-- == 0){ return; } arguments.callee(testInt); } |
ECMAScript5之StrictMode的更多相关文章
- [Web 前端] ECMAScript5之StrictMode
cp from : https://www.cnblogs.com/giggle/p/5252185.html ECMAScript5引入一个严格模式的概念(Strict Mode). 它的作用就是不 ...
- ECMAScript5之Object
在ECMAScript5中对Object新增的些方法,以前没注意的同志们,嘻嘻,下面我们再一起来边看边学. 1.Object之create Create单词意为创造嘛,作为Object的静态方法,不言 ...
- ECMAScript5之Array
在ECMAScript5中对Array新增的些方法,以前没注意的同志们,嘻嘻,下面我们一起来边看边学. 1.Array之isArray(element) 看到isArray,不言而喻,就是判断一个对象 ...
- 转:StrictMode使用
最新的Android平台中(Android 2.3起),新增加了一个新的类,叫StrictMode(android.os.StrictMode).这个类可以用来帮助开发者改进他们编写的应用,并且提供了 ...
- 了解一下JavaScript的未来——ECMAScript5
神马是EcmaScript5 首先得先搞清楚ECMAScript是神马,我们知道JavaScript或者说LiveScript最开始是Netscape搞出来的,后来微软也跟进搞出了Jscript,Sc ...
- ECMAScript5的其它新特性
之前两篇博客 ECMAScript5 Object的新属性方法,ECMAScript5 Array新增方法,分别介绍了ECMAScript5对Object和Array的拓展,这两个对象最常用,而且改动 ...
- ECMAScript5 Array新增方法
数组在各个编程语言中的重要性不言而喻,但是在之前的JavaScript中数组(JavaScript 数组详解)虽然功能已经很强大,但操作方法并不完善,在ECMAScript5中做了适当的补充. Arr ...
- ECMAScript5 Object的新属性方法
虽然说现在并不是所有的浏览器都已经支持ECMAScript5的新特性,但相比于ECMAScript4而言ECMAScript5被广大浏览器厂商广泛接受,目前主流的浏览器中只有低版本的IE不支持,其它都 ...
- JS性能方面--内存管理及ECMAScript5 Object的新属性方法
Delete一个Object的属性会让此对象变慢(多耗费15倍的内存) var o = { x: 'y' }; delete o.x; //此时o会成一个慢对象 o.x; // var o = { x ...
随机推荐
- javax.mail 发送邮件异常
一.运行过程抛出异常 1.Exception in thread "main" java.lang.NoClassDefFoundError: com/sun/mail/util/ ...
- mac安装虚拟机
1. 安装VirtualBox 2. 新建,按照步骤一步步选择 3.安装系统镜像 xp_sp3_74070.iso CN_WIN7_SP1_X64_33in1_V1.2.iso 设置磁盘分区等 4.V ...
- c#List移除列表中的元素
对于一个List<T>对象来说移除其中的元素是常用的功能.自己总结了一下,列出自己所知的几种方法. class Program { static void Main(string[] ar ...
- K线图学习
本博文(适合入门的股民朋友)内容来自网络,股市有风险,入市需谨慎 一.起源 K线图(Candlestick Charts)又称蜡烛图.日本线.阴阳线.棒线等,常用说法是“K线”,起源于日本十八世纪德川 ...
- ubuntu环境下vmware取消自动启动服务
概述其实vmware这个服务取不取消,影响不大,主要是我有强迫症,在不用虚拟机的时候,看着vmware占着进程真心不爽,想要解决这个问题,在用虚拟机的时候启动服务,反之,则停.接下来,我说一下实现吧. ...
- *HDU1846HDU2188 巴什博奕
Brave Game Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ...
- bat 延时删除指定文件夹中的文件经验分享
1.bat延时 xp程序中通过ping 127.0.0.1 -n 20 来实现延时操作,ping本地地址20行. win7中通过timeout 20 来实现延时20秒. 2.删除指定文件 del /q ...
- JSP :运行最简单的 JSP 程序
160916 1. 代码和显示效果 <%@ page contentType="text/html; charset=GB2312" %> <%@ page im ...
- 编译可在Android上运行的qemu user mode
前言 本文在Ubuntu 64位系统上对qemu项目进行交叉编译,并且只编译与qemu user mode有关的代码. 下文中的”NDK”若无特殊说明均指”Android NDK”. 下文中”$NDK ...
- 现在创业做App,先做 Android 还是 iOS?
随着互联网+的高速发展,现在创业大部分都是在布局移动端,初期往往摆在面前最大的难题是,如何分配有限的成本,在最快的速度内占领市场?这个大难题会影响创始人在团队和产品建设方方面面的决定.缩小至移动App ...