严格模式可以让你更早的发现错误,因为那些容易让程序出错的地方会被找出来
 
打开严格模式:"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. 好用的前端页面性能检测工具—sitespeed.io

    引言 最近在做HTTP2技术相关调研,想确认一下HTTP2在什么情境下性能会比HTTP1.x有显著提升,当我把http2的本地环境(nginx+PHP)部署完成后进行相关测试时,我遇到了以下问题: ( ...

  2. FZU 1919 -- K-way Merging sort(记忆化搜索)

    题目链接 Problem Description As we all known, merge sort is an O(nlogn) comparison-based sorting algorit ...

  3. http://codeforces.com/contest/536/problem/B

    B. Tavas and Malekas time limit per test 2 seconds memory limit per test 256 megabytes input standar ...

  4. httpd网页身份认证

    html { font-family: sans-serif } body { margin: 0 } article,aside,details,figcaption,figure,footer,h ...

  5. C# 7.0 新特性:本地方法

    C# 7.0:本地方法 VS 2017 的 C# 7.0 中引入了本地方法,本地方法是一种语法糖,允许我们在方法内定义本地方法.更加类似于函数式语言,但是,本质上还是基于面向对象实现的. 1. 本地方 ...

  6. Redis “瘦身”指南

    code[class*="language-"], pre[class*="language-"] { background-color: #fdfdfd; - ...

  7. ZOJ2724 Windows Message Queue 裸queue的模拟

    题目要求FIFO #include<cstdio> #include<cstdlib> #include<iostream> #include<queue&g ...

  8. UWP 唤起应用商城,邮件

    UWP做到收尾工作的时候,一般需要在应用内做一个关于页面,用于放你的邮箱链接,商店评论链接等.. 一:打开链接 打开链接有两种做法 1.用 HyperlinkButton  (超链接按钮)这个控件,给 ...

  9. iOS之浅谈纯代码控制UIViewController视图控制器跳转界面的几种方法

    .最普通的视图控制器UIViewContoller 一个普通的视图控制器一般只有模态跳转的功能(ipad我不了解除外,这里只说iPhone),这个方法是所有视图控制器对象都可以用的,而实现这种功能,有 ...

  10. Spring4.0.1+Quartz2.2.1实现定时任务调度[亲测可用]

    Spring4.0.1+Quartz2.2.1实现定时任务调度[亲测可用] tip:只需要配置xml文件即可 1.第三方依赖包的引入 <properties> <project.bu ...