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. Bootstrap -- 文本,背景,其他样式

    Bootstrap -- 文本,背景,其他样式 1. 文本样式:展示了不同的文本颜色 使用文本样式: <!DOCTYPE html> <html> <head> & ...

  2. XML详解二XML的解析与创建

    XML用来传输和存储数据,如何解析获取到的XML文本呢? 一.解析XML 创建demo.xml文件: <?xml version="1.0" encoding="U ...

  3. Docker的使用初探(一):常用指令说明

    目录 Docker的使用初探(一):常用指令说明 为什么要用Docker Docker的安装与简单使用 国内镜像加速 常用指令 Docker的使用初探(一):常用指令说明 前几个星期实践的了,再不记录 ...

  4. EXTJS的使用

    最近一段时间一直使用Extjs作为前端,通过HTTP与.net后端进行交互,今天总结一下EXTJS,方便以后复习. 1.概念: ExtJS可以用来开发RIA也即富客户端的AJAX应用,是一个用java ...

  5. mysql 相关命令

    1.mysql导入导出 导出 进入到mysql bin目录 导出表 ./mysqldump -uroot -p --socket=/wdcloud/app/mysql1/temp/mysql.sock ...

  6. os模块使用

    Python获取当前文件名的两种方法 1,使用python文件默认的‘ file ’属性 2,使用 sys.argv[0] print sys.argv # 输入参数列表print sys.argv[ ...

  7. java中的out of memory

    转:http://outofmemory.cn/c/java-outOfMemoryError java.lang.OutOfMemoryError这个错误我相信大部分开发人员都有遇到过,产生该错误的 ...

  8. DOTween 相关API效果

    1,首先看一遍完整Tween路径 2,操作 DoPlay->DoRestart,DoRestart是从调用时刻重新开始开始执行Tween 3,操作 DoPlay->DoReWind,DoR ...

  9. python多线程和多进程

    1 概念梳理: 1.1 线程 1.1.1 什么是线程 线程是操作系统能够进行运算调度的最小单位.它被包含在进程之中,是进程中的实际运作单位.一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发 ...

  10. Linux operating system basic knowleadge

    1.Linux目录系统结构  It makes sense to explore the Linux filesystem from a terminal window. In fact, that ...