strict 严格模式

严格模式可以让你更早的发现错误,因为那些容易让程序出错的地方会被找出来

打开严格模式:"use strict"

不支持的javascript引擎会忽略它,当作是一个未赋值字符串。如果在一个脚本使用全局使用严格模式,那么在同一个页面的其他脚本也会严格。也可以在某个函数里声明使用严格模式。

在平时,没有声明直接使用的变量作为全局变量处理

number = 1;

在严格模式里,会抛出引用错误(referenceerror)

同时变量是无法delete的,在平时 delete number会安静地失败,在严格模式里也会报引用类型错误

严格模式下,变量和函数名都无法使用implements,interface,let,package,private,protected,public,static,yield 这是保留给以后用

对于对象的操作有更大的限制,对于许多平时会安静地失败操作都会报错:

Assigning a value to a read-only property throws a TypeError.

Using delete on a nonconfigurable property throws a TypeError.

Attempting to add a property to a nonextensible object throws a TypeError.

还有,不能声明重复属性:

var person = {

name: “Nicholas”,

name: “Greg”

};

函数的行参名字必须唯一的,在平常不会报错,直接使用后面那个:

function sum (num, num){

//do something

}

在平时函数里改变传进来的参数,arguments也会跟着改变,但是严格模式不会。也就是严格模式下两者是分开独立的。

function showValue(value){

value = “Foo”;

alert(value); //”Foo” alert(arguments[0]); //Non-strict mode: “Foo”//Strict mode: “Hi”

}

showValue(“Hi”);

以下两者在严格模式都无法使用:

arguments.callee 平时可以访问函数自己

arguments.caller  可以访问调用本函数的caller

函数声明必须是at the top level of a script or function

if (true){

function doSomething(){//... }

这样是会报错的。

对于eval函数,最大的限制在于不会在包含他的执行上下文内创建变量或者函数:

function doSomething(){

eval(“var x=10”);

alert(x);//抛出ReferenceError

}

不在执行上下文的eval里的还是可以创建变量,但会收到限制,这些变量保存到一个特殊的作用域,代码执行完就会销毁:

“use strict”;

var result = eval(“var x=10, y=11; x+y”);

alert(result); //21

这里执行alert时,x,y已经被销毁了

明确不能定义操作eval和arguments:

- ?  Declaration using var

- ?  Assignment to another value

- ?  Attempts to change the contained value, such as using ++

- ?  Used as function names

- ?  Used as named function arguments

- ?  Used as exception name in try-catch statement

对this的限制,下面例子在平时this转而指向全局变量,输出red,严格模式下会出现错误,因为this只会指向null

var color = “red”;

function displayColor(){         alert(this.color);

}

displayColor.call(null);

严格模式还移除了一些常用会出错的,例如with,不允许使用八进制

parseInt函数的改变:

var value = parseInt(“010”)

非严格模式输出8,严格模式输出10

在需要严格模式的代码前添加

"use strict"

单纯一个函数也可以

function doSomething(){ “use strict”;

//function body }

该模式会改变许多运行方式

时间: 2025-01-13 05:01:46

strict 严格模式的相关文章

js 'use strict' 严格模式

一.概述 除了正常运行模式,ECMAscript 5添加了第二种运行模式:"严格模式"(strict mode).顾名思义,这种模式使得Javascript在更严格的条件下运行. 设立"严格模式"的目的,主要有以下几个: - 消除Javascript语法的一些不合理.不严谨之处,减少一些怪异行为; - 消除代码运行的一些不安全之处,保证代码运行的安全: - 提高编译器效率,增加运行速度: - 为未来新版本的Javascript做好铺垫. "严格模式&quo

【AngularJS学习笔记】Java Script "use strict" 严格模式

---恢复内容开始--- 学习Angular的时候,发现好多优秀的源码中,JS文件的最上面,都会写上"use strict"; 这几个字符,搜了一下,找到一篇比较不错的文章,抄过来备用. 原文链接:http://www.ruanyifeng.com/blog/2013/01/javascript_strict_mode.html 一.概述 除了正常运行模式,ECMAscript 5添加了第二种运行模式:"严格模式"(strict mode).顾名思义,这种模式使得J

“use strict”严格模式及代码压缩

Javascript的语法比较松散,大家对该门语言的印象可能是“简单”,我认为这恰恰相反.使用严格模式能防止你写出粗制滥造的语法代码来.应用了严格模式后尽管控制台报告的某些错误需要很大精力排除,但是从长远角度来说,却有助于你写出整洁.更易扩展的代码来. 我们需要在函数的定义中插入“use strict”指令,这样的话,解析器就会使用更加严格的规则来执行脚本了.该指令应该成为javascript的一项编程原则. 1 function Salad(){ 2 3 "use strict";

"use strict"

"use strict";//严格模式 <!doctype html> <html> <head> <meta charset="utf-8"> <title>无标题文档</title> </head> <body> <script> "use strict"; (function() { var a = b = 5; })();//这个会

JavaScript严格模式

"use strict" 指令 "use strict" 指令在 JavaScript 1.8.5 (ECMAScript5) 中新增.它不是一条语句,但是是一个字面量表达式,在 JavaScript 旧版本中会被忽略."use strict" 的目的是指定代码在严格条件下执行.严格模式下你不能使用未声明的变量. 严格模式声明 严格模式通过在脚本或函数的头部添加 "use strict"; 表达式来声明.大家可以通过浏览器的F

Javascript 严格模式与正常模式的区别

原来来自:http://www.ruanyifeng.com/blog/2013/01/javascript_strict_mode.html Javascript 严格模式详解 作者: 阮一峰 日期: 2013年1月14日 一.概述 除了正常运行模式,ECMAscript 5添加了第二种运行模式:"严格模式"(strict mode).顾名思义,这种模式使得Javascript在更严格的条件下运行. 设立"严格模式"的目的,主要有以下几个: - 消除Javascr

js备战春招の四の严格模式

JavaScript 严格模式(strict mode)即在严格的条件下运行. use strict 严格模式下你不能使用未申明的变量 "use strict" 指令只运行出现在脚本或函数的开头. 使用严格模式的意义: 消除代码运行的一些不安全之处,保证代码运行的安全: 提高编译器效率,增加运行速度: 为未来新版本的Javascript做好铺垫. 严格模式的限制 不允许使用未声明的变量: 不允许删除变量或对象. 不允许删除函数. 不允许变量重名: 不允许使用八进制: 不允许使用转义字符

【转】十个JavaScript中易犯的小错误,你中了几枪?

在今天,JavaScript已经成为了网页编辑的核心.尤其是过去的几年,互联网见证了在SPA开发.图形处理.交互等方面大量JS库的出现. 如果初次打交道,很多人会觉得js很简单.确实,对于很多有经验的工程师,或者甚至是初学者而言,实现基本的js功能几乎毫无障碍.但是JS的真实功能却比很多人想象的要更加多样.复杂.JavaScript的许多细节规定会让你的网页出现很多意想不到的bug,搞懂这些bug,对于成为一位有经验的JS开发者很重要. 常见错误一:对于this关键词的不正确引用 我曾经听一位喜

聊一下JS中的作用域scope和闭包closure

scope和closure是javascript中两个非常关键的概念,前者JS用多了还比较好理解,closure就不一样了.我就被这个概念困扰了很久,无论看别人如何解释,就是不通.不过理越辩越明,代码写的多了,小程序测试的多了,再回过头看看别人写的帖子,也就渐渐明白了闭包的含义了.咱不是啥大牛,所以不搞的那么专业了,唯一的想法就是试图让你明白什么是作用域,什么是闭包.如果看了这个帖子你还不明白,那么多写个把月代码回过头再看,相信你一定会有收获:如果看这个帖子让你收获到了一些东西,告诉我,还是非常