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. 7 Best Free RAR Password Unlocker Software For Windows

    Here is the list of Best Free RAR Password Unlocker Software for Windows. These software run differe ...

  2. vue 路由元信息

    官方文档:路由meta元信息 前言: 在设置面包屑导航还有菜单栏的时候,路由的meta字段可以自定义我们需要的信息,然后路由跳转的时候,提供我们判断条件 文档: 定义路由的时候可以配置 meta 字段 ...

  3. SQL MID() 函数

    MID() 函数 MID 函数用于从文本字段中提取字符. SQL MID() 语法 SELECT MID(column_name,start[,length]) FROM table_name 参数 ...

  4. VMware Workstation中安装linux系统(CentOS)超详细(部分转载)

    首先准备一下VMware虚拟机和linux镜像文件,链接如下: 对于32位windows机子安装的是10.0.7版本的VMware Workstation,链接: https://pan.baidu. ...

  5. rtsp 流媒体服务器,播放器

    https://github.com/EasyDSS/EasyPlayer-RTSP-Android EasyPlayer EasyPlayer RTSP Android 播放器是由紫鲸团队开发和维护 ...

  6. 苹果手机连接Wifi认证机制

    Wifi状态保持方法和nas设备 https://patents.google.com/patent/CN106793171A/zh 基于ios终端的离线wifi热点认证方法和认证系统 https:/ ...

  7. Linux内核入门到放弃-设备驱动程序-《深入Linux内核架构》笔记

    I/O体系结构 总线系统 PCI(Peripheral Component Interconnect) ISA(Industrial Standard Architecture) SBus IEEE1 ...

  8. 基于密度峰值的聚类(DPCA)

    1.背景介绍 密度峰值算法(Clustering by fast search and find of density peaks)由Alex Rodriguez和Alessandro Laio于20 ...

  9. 探寻 JavaScript 精度问题

    阅读完本文可以了解到 0.1 + 0.2 为什么等于 0.30000000000000004 以及 JavaScript 中最大安全数是如何来的. 十进制小数转为二进制小数方法 拿 173.8125 ...

  10. 二十六、css3改变checkbox复选框的样式

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...