严格模式可以让你更早的发现错误,因为那些容易让程序出错的地方会被找出来
 
打开严格模式:"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. HDFS 分布式写入问题 AlreadyBeingCreatedException

    进行追加文件时出现AlreadyBeingCreatedException错误 堆栈信息大致如下: org.apache.hadoop.ipc.RemoteException(org.apache.h ...

  2. mybatis typehandler

    建立TypeHandler 我们知道java有java的数据类型,数据库有数据库的数据类型,那么我们在往数据库中插入数据的时候是如何把java类型当做数据库类型插入数据库,在从数据库读取数据的时候又是 ...

  3. 【笔记】如何查看HTTP请求头&&【实验吧】天下武功唯快不破

    打开Chrome浏览器,点击右上角“三”按钮. 点击工具-----再点击开发者工具   找到Network选项框.以百度经验页面为例,点击任务选框来查看网络请求流   在Network框内会有所有的请 ...

  4. Entity Framework Code First实现乐观并发

    Entity Framework Code First实现乐观并发 不定时更新翻译系列,此系列更新毫无时间规律,文笔菜翻译菜求各位看官老爷们轻喷,如觉得我翻译有问题请挪步原博客地址 本博文翻译自: h ...

  5. 【Java核心】ClassLoader原理及其使用

    又把博客的皮肤换了换,看着更加简洁舒心一些.前段的知识只是略懂,拿过来就能用,只是自己的审美和设计水平有限,实在难以弄出自己特别满意的东西,也算是小小的遗憾吧!言归正传,由于最近涉及到Java核心的东 ...

  6. 详解python命名空间和作用域

    1.典型案例 先从几个典型的案例来看下名称空间及作用域对python代码运行的影响,请看下面几个代码实例及其执行结果,是否符合你的预期. 代码1:块作用域 if True: i = 1 print i ...

  7. vue-cli如何引入bootstrap工具

    以下操作以正常安装node环境为前提. 1.引入jq: 在npm控制台中,进入项目目录,然后输入指令npm install jquery --save-dev(npm换成cnpm更好,国内环境下使用c ...

  8. 深入浅出:JavaScript作用域链

    1. 什么是作用域 任何程序设计语言都有作用域的概念,简单的说,作用域就是变量的作用范围. 2. 变量的分类和变量作用域的分类 在JavaScript中,变量分为全局变量和局部变量,与此相对应的,变量 ...

  9. STM32外部中断线编程

    #include "ExtiConfig.h" unsigned char key1Down = 0; unsigned char key2Down = 0; /********* ...

  10. 怎么样防止Sql注入

    (1)对于动态构造SQL查询的场合,可以使用下面的技术: 第一:替换单引号,即把所有单独出现的单引号改成两个单引号,防止攻击者修改SQL命令的含义.再来看前面的例子,“SELECT * from Us ...