javascript中的严格模式

原创 2018年04月17日 17:06:22

1.概述

除了正常运行模式,ECMAscript 5添加了第二种运行模式:"严格模式"(strict mode)。顾名思义,这种模式使得Javascript在更严格的条件下运行。

 

2.为什么用严格模式

- 消除Javascript语法的一些不合理、不严谨之处,减少一些怪异行为;

- 消除代码运行的一些不安全之处,保证代码运行的安全;

- 提高编译器效率,增加运行速度;

- 为未来新版本的Javascript做好铺垫。

"严格模式"体现了Javascript更合理、更安全、更严谨的发展方向,包括IE 10在内的主流浏览器,都已经支持它,许多大项目已经开始全面拥抱它。

另一方面,同样的代码,在"严格模式"中,可能会有不一样的运行结果;一些在"正常模式"下可以运行的语句,在"严格模式"下将不能运行。掌握这些内容,有助于更细致深入地理解Javascript,让你变成一个更好的程序员。

3、进入标志

"use strict";

4、如何调用

4.1针对单个脚本

<script>
 "use strict";
 console.log("这是严格模式。");
</script>

4.2针对单个函数

function strict(){
 "use strict";
 return "这是严格模式。";
}
function notStrict() {
 return "这是正常模式。";
}

5.语法与行为改变

严格模式对Javascript的语法和行为,都做了一些改变。

5.1 全局变量显式声明

在正常模式中,如果一个变量没有声明就赋值,默认是全局变量。严格模式禁止这种用法,全局变量必须显式声明。

"use strict";
v = 1; // 报错,v未声明
for(i = 0; i < 2; i++) { // 报错,i未声明
}

因此,严格模式下,变量都必须先用var命令声明,然后再使用。

5.2 禁止this关键字指向全局对象

function f(){
 return !this;
} 
// 返回false,因为"this"指向全局对象,"!this"就是false
function f(){ 
 "use strict";
 return !this;
} 
// 返回true,因为严格模式下,this的值为undefined,所以"!this"为true。

因此,使用构造函数时,如果忘了加new,this不再指向全局对象,而是报错。

function f(){
 "use strict";
 this.a = 1;
};
f();// 报错,this未定义

5.3禁止删除变量

严格模式下无法删除变量。只有configurable设置为true的对象属性,才能被删除。

"use strict";
var x;
delete x; // 语法错误
var o = Object.create(null, {'x': {
  value: 1,
  configurable: true
}});
delete o.x; // 删除成功

5.4对象不能有重名的属性

正常模式下,如果对象有多个重名属性,最后赋值的那个属性会覆盖前面的值。严格模式下,这属于语法错误。

"use strict";
var o = {
  p: 1,
  p: 2
}; // 语法错误

5.5函数不能有重名的参数

正常模式下,如果函数有多个重名的参数,可以用arguments[i]读取。严格模式下,这属于语法错误。

 "use strict";
 function f(a, a, b) { // 语法错误
   return ;
 }






JavaScript严格模式与非严格模式之间的区别

严格模式 非严格模式 禁止使用with语句 允许使用with语句 所有变量要先声明 使用未声明的变量将隐式声明为全局变量 函数(非方法)中的this是und...
  • weixin_37986839
  • weixin_37986839
  • 2017-08-30 00:45:00
  • 303

JavaScript中的严格模式

最近详细了解了下严格模式,本想自己总结下,但是我太懒了,就直接转一篇总结文吧! 如果不想要二手的,可以直接看https://developer.mozilla.org/en-US/docs/Web/...
  • u012422829
  • u012422829
  • 2016-09-05 21:45:47
  • 1513

Js中严格模式和非严格模式的区别

严格模式和非严格模式的区别 //f1.js 'use strice'; //整个js文件都是严格模式下执行的 var n = 1; var foo = function(){...}; //....
  • Ayiayi00
  • Ayiayi00
  • 2017-09-02 18:17:01
  • 1660

Javascript 严格模式

简介         严格模式是一种将更好的错误检查引入代码中的方法。 在使用严格模式时,你无法使用隐式声明的变量、将值赋给只读属性或将属性添加到不可扩展的对象等。  声明严格模式 可以通过在文...
  • u013705728
  • u013705728
  • 2015-05-06 21:10:49
  • 526

JavaScript之es5.0严格模式

严格模式现在的浏览器是基于es3.0和es5.0的一些新增的方法使用的。然而,在es3.0和es5.0必然会有冲突的部分,而这些冲突的部分就是使用es3.0的严格模式定义&quot;use stric...
  • c__dreamer
  • c__dreamer
  • 2018-02-17 20:51:03
  • 46

js中的 "use strict" 做了什么?使用严格模式有什么优点

标记 严格模式后 其一:如果在语法检测时发现语法问题,则整个代码块失效,并导致一个语法异常。 其二:如果在运行期出现了违反严格模式的代码,则抛出执行异常。 注:经过测试IE6,7,8,9均不支持...
  • lqr891109
  • lqr891109
  • 2016-06-06 14:47:06
  • 291

js严格模式——arguments变为参数的静态副本

show u the code ! //一般模式 ! function (a){ arguments[0]=100; console.log(a);//undefined ...
  • yCharlee
  • yCharlee
  • 2016-09-05 14:31:33
  • 1095

Javascript 严格模式详解

  • 2013年02月19日 14:49
  • 7KB
  • 下载

ES6的let须在js严格模式下才能运行

简单的讲了一下ES6的let关键字在js严格模式下才能正常运行。
  • Reus_chan
  • Reus_chan
  • 2016-11-29 10:49:42
  • 2533

js中严格模式与普通模式区别

sunshinegirl 标签: js,javascript 1.不允许用with。 2.所有变量必须声明,赋值给未声明的变量报错,而不是隐匿创建全局变量。 3.eval中的代码不能创建eval...
  • sunshinegirl_7
  • sunshinegirl_7
  • 2015-10-30 13:30:25
  • 2146
收藏助手
不良信息举报
您举报文章:javascript中的严格模式
举报原因:
原因补充:

(最多只允许输入30个字)