why 严格模式

[1] 消除js语法的一些不合理、不严谨、不安全问题,减少怪异行为并保证代码运行安全
[2] 提高编译器效率,增加运行速度

使用

[1]整个脚本启用严格模式,在顶部执行:"use strict";
[2]在指定函数中执行严格模式,在函数体第一行:"use strict"
[3]不支持strict模式的浏览器把"use strict"当做一个字符串语句执行,支持strict模式的浏览器将开启strict模式
[4]支持严格模式的浏览器包括IE10+、Firefox4+、safari12+、opera12+、chrome

规则

【1】变量

[a]不允许意外创建全局变量
"use strict";
message = 'hello world!';

[b]不能对变量调用delete操作符
"use strict";
var color = 'red';
delete color;

【2】对象

"use strict";
var person = {
    name:'cook'
};

[a]不能为只读属性赋值
Object.defineProperty(person,'name',{
    writable: false
});
person.name = 'Nicholas';

[b]不能为不可配置的属性使用delete操作
Object.defineProperty(person,'name',{
    configurable: false
});
delete person.name;

【3】函数

[a]参数必须唯一
"use strict";
function sun(num,num){
    //TODO
}

[b]修改形参不会反映到arguments中
function showValue(value){
    value = "Foo";
    alert(arguments[0]);
    //非严格模式:"Foo"
    //严格模式:"Hi"
}
showValue("Hi");

[c]不允许使用arguments.callee和arguments.caller
// callee是arguments对象的一个属性、用来指向当前执行的函数。
// caller是function对象的一个属性用于返回一个function引用、它返回调用它的function对象

"use strict";
function fn(num){
    return arguments.callee(num);
}
fn(2); // 报错

function outer(){
    inner();
}
function inner(){
    alert(inner.caller());
}
outer(); // 报错

【4】不允许eval()在包含上下文中创建变量或函数

"use strict";
function fn(){
    eval("var x=10");
    alert(x);
}
fn(); // 报错

但是允许下面这样做

//允许以下操作
var result = eval("var x = 10, y = 11; x+y");
alert(result);//21

【5】不允许使用eval和arguments作为标识符,也不允许读写他们的值

"use strict";
var eval = 10;
var arguments = 20;

【6】不允许this值为null或undefined

"use strict";
var color = "red";
function fn(){
    alert(this.color);
}
fn(); //  这样调用的话 this指向undefined 因此报错
new fn() // 这样调用的话 this指向实例对象 因此不会报错

【7】不允许使用with语句

"use strict";
with(location){
    alert(href);
}

【8】不允许使用八进制字面量

"use strict";
var value = 010;

JavaScript 基础六 'use strict'严格模式下的规则的更多相关文章

  1. javascript基础修炼(3)—What's this(下)

    开发者的javascript造诣取决于对[动态]和[异步]这两个词的理解水平. 这一期主要分析各种实际开发中各种复杂的this指向问题. 一. 严格模式 严格模式是ES5中添加的javascript的 ...

  2. JavaScript 基础(六) 数组方法 闭包

    在一个对象中绑定函数,称为这个对象的方法.在JavaScript 中,对象的定义是这样的: var guagua = { name:'瓜瓜', birth:1990 }; 但是,如果我们给瓜瓜绑定一个 ...

  3. JavaScript基础函数的属性:记忆模式(019)

    函数在Javascript里是有属性的,因为它们是一种特殊对象.事实上,就算是没有明确声明,函数在最初就已经包含了一些固有的属性,比如所有函数都length这个属性,它可以指出函数声明了多少个参数: ...

  4. linux基础命令之:vi模式下查找和替换

    一.查找 查找命令 /pattern<Enter> :向下查找pattern匹配字符串 ?pattern<Enter>:向上查找pattern匹配字符串 使用了查找命令之后,使 ...

  5. javascript基础(六)对象

    原文http://pij.robinqu.me/ JavaScript Objects 创建对象 对象直接量 var o = { foo : "bar" } 构造函数 var o ...

  6. javascript基础学习系列-原型链模式

    1.demo代码如下: 2.画图如下: 3.规则: 1)每一个函数数据类型(普通函数/类)都有一个天生自带的属性:prototype(原型),并且这个属性是一个对象数据类型的值 2)并且prototy ...

  7. javascript基础六(事件对象)

    1.事件驱动     js控制页面的行为是由事件驱动的.          什么是事件?(怎么发生的)     事件就是js侦测到用户的操作或是页面上的一些行为       事件源(发生在谁身上)   ...

  8. Web前端-JavaScript基础教程下

    Web前端-JavaScript基础教程下 <script>有6个属性: async对外部脚本有效,可以用来异步操作,下载东西,不妨碍其他操作. charset为src属性指定字符集. d ...

  9. JavaScript基础插曲—元素样式,正则表达式,全局模式,提取数组

    JavaScript基础学习 学习js的基础很重要,可以让自己有更多的技能.我相信这个以后就会用到. Eg:点击选择框,在div中显示出选择的数量 window.onload = function() ...

随机推荐

  1. jenkins使用开始踩坑(1)

    上篇文章 安装教程 :https://www.cnblogs.com/linuxchao/p/linuxchao-jenkins-setup.html 一.前戏 话说上一篇文章安装完 JDK 和 je ...

  2. java.io.IOException: There appears to be a gap in the edit log. We expected txid ***, but got txid

    方式1 原因:namenode元数据被破坏,需要修复解决:恢复一下namenode hadoop namenode -recover 一路选择Y,一般就OK了 方式2 Need to copy the ...

  3. 实现element-ui中table点击一行展开

    转:https://www.jianshu.com/p/e51ba4cb11d6 先上效果   效果图 三要素 1.row-click 点击行 2.ref 自行了解vue 3.toggleRowExp ...

  4. npm:Fatal error in , line 0 #unreachable code 解决

    是nodejs环境本身的问题,下载nodejs执行repair即可

  5. Docker(2):使用Dockerfile创建支持SSH服务的镜像

    1.创建工作目录 # mkdir sshd_ubuntu # ls 在其中,创建Dockerfile和run.sh文件 # cd sshd_ubuntu/ # touch Dockerfile run ...

  6. day8-基础函数的学习(三)

    开始今日份总结 今日目录 1.生成器 2.列表推导式 3.匿名函数 4.装饰器 开始今日份总结 1.生成器 1.1 生成器的定义 定义:生成器本质就是迭代器,生成器是自己用python代码写的迭代器 ...

  7. 【Consul】CONSUL调研

    [Consul]CONSUL调研 2016年08月18日 18:31:53 YoungerChina 阅读数:1962更多 所属专栏: Consul修炼   版权声明:原创不易,转载请注明出处! ht ...

  8. .net 信息采集ajax数据

    .net 信息采集ajax数据 关于.net信息采集的资料很多,但是如果采集的网站是ajax异步加载数据的模式,又如何采集呢?今天就把自己做信息采集时,所遇到的一些问题和心得跟大家分享一下. 采集网站 ...

  9. windows 比较文件命令--fc

    dos环境下的比较文件命令 win7帮助 D:\test>fc /? 比较两个文件或两个文件集并显示它们之间 的不同 FC [/A] [/C] [/L] [/LBn] [/N] [/OFF[LI ...

  10. faster-rcnn原理讲解

    文章转自:https://zhuanlan.zhihu.com/p/31426458 经过R-CNN和Fast RCNN的积淀,Ross B. Girshick在2016年提出了新的Faster RC ...