严格模式可以让你更早的发现错误,因为那些容易让程序出错的地方会被找出来
 
打开严格模式:"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 }
 
该模式会改变许多运行方式

strict 严格模式的更多相关文章

  1. “use strict” 严格模式使用(前端基础系列)

    ECMAscript5添加一种严格模式的运行模式("use strict"),让你的js语句在更加严格的环境下进行运行: 一.主要作用: 消除版本javascript中一些不合理及 ...

  2. 编写JS代码的“use strict”严格模式及代码压缩知识

    Javascript的语法比较松散,大家对该门语言的印象可能是“简单”,我认为这恰恰相反.使用严格模式能防止你写出粗制滥造的语法代码来.应用了严格模式后尽管控制台报告的某些错误需要很大精力排除,但是从 ...

  3. JavaScript 基础六 'use strict'严格模式下的规则

    why 严格模式 [1] 消除js语法的一些不合理.不严谨.不安全问题,减少怪异行为并保证代码运行安全 [2] 提高编译器效率,增加运行速度 使用 [1]整个脚本启用严格模式,在顶部执行:" ...

  4. vuex中strict严格模式

    开启严格模式,仅需在创建 store 的时候传入strict: true const store = new Vuex.Store({ state, strict:true//开启严格模式后,只能通过 ...

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

    ---恢复内容开始--- 学习Angular的时候,发现好多优秀的源码中,JS文件的最上面,都会写上"use strict"; 这几个字符,搜了一下,找到一篇比较不错的文章,抄过来 ...

  6. JS中的“use strict” 严格模式

    1.介绍严格模式 2.严格模式影响范围 变量:  var.delete.变量关键字 对象: 只读属性. 对象字面量属性重复申明 函数:参数重名.arguments对象.申明 其他:this.eval. ...

  7. js:"use strict"; 严格模式

    http://www.ruanyifeng.com/blog/2013/01/javascript_strict_mode.html

  8. "use strict"

    "use strict";//严格模式 <!doctype html> <html> <head> <meta charset=" ...

  9. (function(){}).call(window) 严格模式匿名函数的this指向undefined

    上次在群里,看到有人发出 (function(){}).call(window) 这么一段代码,问这有什么意义,匿名函数中的this不是始终都指向window的么,为什么还要call,我当时也很疑惑. ...

随机推荐

  1. 我的Spring学习记录(三)

    学习了AOP之后就可以应用一下了,所以这次我们了解一下Spring的声明式事务. 事务在我们的很多方面都可以体现,就拿我们平时的买卖活动,或者是银行的转账来说,这些活动要么是成功,要么是失败,比如:张 ...

  2. kbhit()

    kbhit() 非阻塞的响应键盘输入时间   C++函数 功能和返回值:检查是否有键盘输入 ,有返回非0 ,无返回0 int khbit(void) 头文件: #include<conio.h& ...

  3. [js高手之路] html5 canvas动画教程 - 匀速运动

    匀速运动:指的是物体在一条直线上运动,并且物体在任何相等时间间隔内通过的位移都是相等的.其实就是匀速直线运动,它的特点是加速度为0,从定义可知,在任何相等的时间间隔内,速度大小和方向是相同的. < ...

  4. python中如何不区分大小写的判断一个元素是否在一个列表中

    python中判断某一个元素是否在一个列表中,可以使用关键字in 和 not in. 示例如下: 如果需要输出相应的信息,可以搭配使用if语句,这里不赘述. --------------------- ...

  5. 【框架学习与探究之消息队列--EasyNetQ(1)】

    前言 本文欢迎转载,实属原创,本文原始链接地址:http://www.cnblogs.com/DjlNet/p/7603554.html 废话 既然都是废话了,所以大家就可以跳过了,这里是博主有事没事 ...

  6. C#分布式事务解决方案-TransactionScope

    引用一下别人的导读:在实际开发工作中,执行一个事件,然后调用另一接口插入数据,如果处理逻辑出现异常,那么之前插入的数据将成为垃圾数据,我们所希望的是能够在整个这个方法定义为一个事务,Transacti ...

  7. python netifaces模块

    简介 在Linux系统中,我们可以通过ifconfig,route等shell命令来查看系统接口配置,网关和路由等信息.通过shell的正则表达式功能,通过系列复杂操作,我们可以从字符串中提取出相关的 ...

  8. 设置Intel网卡以抓取报文的vlan tag

    一.实验环境 1.ThinkPad T450 Notebook 2.Notebook网卡Intel I218-V 二.设置步骤 1."设备管理器" -> "Inte ...

  9. 小程序解释HTML富文本的两种办法

    今天写着着代码,读取数据库的内容时突然跳出"<span>.<p>. "这些HTML标签.字符,吓一跳:本来如果是写HTML.JS倒也没什么,但是我在写小程序 ...

  10. Python系列之正则表达式详解

    Python 正则表达式模块 (re) 简介 Python 的 re 模块(Regular Expression 正则表达式)提供各种正则表达式的匹配操作,和 Perl 脚本的正则表达式功能类似,使用 ...