【作用】

  [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】对象
  [a]不能为只读属性赋值

"use strict";
var person = {
name:'cook'
};
Object.defineProperty(person,'name',{
writable: false
});
person.name = 'Nicholas';

  [b]不能为不可配置的属性使用delete操作

"use strict";
var person = {
name:'cook'
};
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

"use strict";
function fn(num){
return arguments.callee(num);
}
fn(2);
"use strict";
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);//

【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();

【7】不允许使用with语句

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

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

"use strict";
var value = 010;

javascript严格模式下的8点规则的更多相关文章

  1. JavaScript严格模式下this指向

    一般认为:严格模式下this不允许指向全局对象.是函数体是否处于严格模式! 如:http://www.ruanyifeng.com/blog/2013/01/javascript_strict_mod ...

  2. 关于javascript严格模式下七种禁止使用的写法

    分享至javascript语言精髓与编程实践 开启严格模式(”use strict"): 在全局代码的开始处加入 在eval代码的开始处加入 在函数声明代码处加入 在new Function ...

  3. Javascript 严格模式下保留关键字

    为了应对未来的版本,以下关键字在严格模式下禁止使用. implements interface let package private protected public static yield 示例 ...

  4. Javascript 严格模式下不允许删除一个不允许删除的属性

    如下代码,在严格模式下,如果删除 Object.prototype 浏览器会报错,目前 IE10 也支持 严格模式. <script> "use strict"; de ...

  5. 关于 Javascript 严格模式下多文件合并时注意

    Javascript 在第一行使用 "use strict" 声明严格模式. 但是在多个 js 文件合并时就需要注意了,可能你的是严格模式,但别的文件不是,就会造成错误. 为什么使 ...

  6. MySQL MGR 单主模式下master角色切换规则

    MGR单主模式,master节点可读可写,其余节点都是只读.当配置MGR为单主模式,非master节点自动开启super_read_only 当可读可写的节点异常宕机,会进行怎样的切换?在选择新的可写 ...

  7. Javascript 严格模式下几个禁忌

    禁止使用未声明的变量. 禁止删除变量或对象 禁止删除函数 禁止使用八进制 禁止对只读属性赋值 禁止对一个使用getter方法读取的属性进行赋值 禁止删除一个不允许删除的属性 变量名禁止使用 " ...

  8. 严格模式下的javascript

    arguments: ECMA5移除了实参对象(arguments),在非严格模式下函数里的arguments只是一个标识符,在严格模式下它变成了保留字.严格模式下无法使用arguments作为形参名 ...

  9. Javascript 在严格模式下禁止指向 this

    如下代码, f() 输出的是 false,而 f2() 输出的是 true. 这是因为 f2 在严格模式下禁止 this 指向全局,所以 this 是 undefined, !this 当然是 tru ...

随机推荐

  1. linux添加新LUN,无需重启

    linux添加新LUN,无需重启 在给存储增加新的Lun时,在linux下一般是: A.重启操作系统B.重启HBA卡驱动 1. kudzu添加完新硬盘后,运行命令kudzu重新扫描新的硬件设备,类似a ...

  2. Eclipse不能自动编译 java文件

      在网上的解决方法 方法参考如下: (1) Window-->Preferences-->General-->Workspace  有个"Build automatica ...

  3. ASP.NET 导出gridview中的数据到Excel表中,并对指定单元格换行操作

    1. 使用NPOI读取及生成excel表. (1)导出Click事件: 获取DataTable; 给文件加文件名: string xlsxName = "xxx_" + DateT ...

  4. HTML5的文档结构和新增标签

    一.HTML5 文档结构1.第一步:打开 开发工具,打开指定文件夹:2.第二步:保存 index.html 文件到磁盘中,.html 是网页后缀:3.第三步:开始编写 HTML5 的基本格式.< ...

  5. Flask的socket.error:10053

    一脸懵逼: 学习python一段时间,最近使用flask搭建了一个服务器,然后使用phantom(相当于浏览器)发送请求发送了几条flask就挂掉了,报错信息如下: 由于个人python经验不是很足, ...

  6. C++ REST SDK in Visual Studio 2013

    The C++ REST project provides a modern asynchronous C++ API for cloud-based client-server communicat ...

  7. 直接通过Ajax 处理程序加 Action名,取得变量值。

    var set_value;$(document).ready(function () {            var query = createParam('GetValue', '0');   ...

  8. STC12C5A60S2笔记2(存储)

    STC12C5A60S2单片机分为4个物理上独立的存储区域: 1. 程序flash存储器(60KB) 程序Flash存储器用以存储用户程序及数据.单片机复位后默认从0000H单元开始执行指令. 1) ...

  9. Spring AOP简述

    使用面想对象(Object-Oriented Programming,OOP)包含一些弊端,当需要为多个不具有继承关系的对象引入公共行为时,例如日志,安全检测等.我们只有在每个对象中引入公共行为,这样 ...

  10. java提高篇(二)-----理解java的三大特性之继承

    在<Think in java>中有这样一句话:复用代码是Java众多引人注目的功能之一.但要想成为极具革命性的语言,仅仅能够复制代码并对加以改变是不够的,它还必须能够做更多的事情.在这句 ...