严格模式可以让你更早的发现错误,因为那些容易让程序出错的地方会被找出来
 
打开严格模式:"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. 我的第一个python web开发框架(2)——一个简单的小外包

    第一部分说明 第一部分大概有20来章,主要讲的是一些开发常识.开发前中后期准备内容.开发环境与服务器部署环境安装设置.python基础框架结构与功能等内容,代码会比较简单. 本系列会以故事的方式,向大 ...

  2. MMORPG战斗系统随笔(二)、浅谈场寻路Flow Field PathFinding算法

    转载请标明出处http://www.cnblogs.com/zblade/ 今天给大家带来一篇游戏中寻路算法的博客.去年,我加入一款RTS的游戏项目,负责开发其中的战斗系统,战斗系统的相关知识,属于游 ...

  3. Dom4J生成xml和包含CDATA问题

    在 java注解生成xml和包含CDATA问题里面做了介绍,这里直接贴代码. 1:生成xml的java文件 package com.dufy.test.xml; import java.io.File ...

  4. HCatalog

    HCatalog HCatalog是Hadoop中的表和存储管理层,能够支持用户用不同的工具(Pig.MapReduce)更容易地表格化读写数据. HCatalog从Apache孵化器毕业,并于201 ...

  5. 用python的TK模块实现猜成语游戏(附源码)

    说明:本游戏使用到的python模块有tkinter,random,hashlib:整个游戏分为四个窗口,一个进入游戏的窗口.一个选关窗口.一个游戏进行窗口和一个游戏结束的窗口. 源码有两个主要的py ...

  6. 移动端效果之Swiper

    写在前面 最近在做移动端方面运用到了饿了么的vue前端组件库,因为不想单纯用组件而使用它,故想深入了解一下实现原理.后续将会继续研究一下其他的组件实现原理,有兴趣的可以关注下. 代码在这里:戳我 1. ...

  7. ViewData 不可以有特殊字符,比如. ,等只允许数字字符和空格

    ViewData 不可以有特殊字符,比如. ,等只允许数字字符和空格

  8. Python操作excel表格

    用Python操作Excel在工作中还是挺常用的,因为毕竟不懂Excel是一个用户庞大的数据管理软件 注:本篇代码在Python3环境下运行 首先导入两个模块xlrd和xlwt,xlrd用来读取Exc ...

  9. Revit二次开发初体验

    最近换了下工作,由之前的互联网企业转入了BIM软件开发行列.具体原因不多说,作为一个程序员来说学习永无止境.下面来一个Hello World体验下Revit的二次开发 事前准备 VS Revit 20 ...

  10. 有人提了一个问题:一定要RESTful吗?

    写在前面的话 这个问题看起来就显得有些萌,或者说类似的问题都有些不靠谱,世上哪有那么多一定的事情,做开发都不一定做多久呢,所以说如果你有这个疑问的话是真真有点儿不着调,不过可能也就是随口一问吧,没有深 ...