JavaScript 严格模式(use strict)
一、运用 "use strict" 指令
"use strict" 指令中新增 JavaScript 1.8.5 (ECMAScript5) 。
它不能算一条语句,它是一段文字表达式,在老版本中 JavaScript 会被疏忽。
"use strict"; 的用途是指导 JavaScript 代码应当以“严格模式”下实行。
未声明的变量你不能再严格模式下使用。
| 严格模式的浏览器都支持一下版本:Internet Explorer 10版本 +、 Firefox 4版本+ Chrome 13版本+、 Safari 5.1版本+、 Opera 12版本+。 |
---|
二、严格的模式声明
通过在脚本或函数的开端添加 "use strict"; 严格模式的声明。
如下:
示例代码
"use strict";
x = 3.14; // 错误提示 (x 未声明定义)
演示一下
示例代码
"use strict";
myFunction();
function myFunction() {
y = 3.14; // 会出现错误 (y 未定义)
}
演示一下
在函数里面申明是部分用途域 (惟有函数中的代码以严格模式实行):
示例代码
x = 3.14; // 不报错提示
myFunction();
function myFunction() {
"use strict";
y = 3.14; // 会出现错误 (y 未定义)
}
演示一下
为什么使用严格模式:
严格模式使我们更容易编写“安全的” JavaScript。
严格模式把之前可承受的“坏语法”转变为真实的错误。
举例,在普通的 JavaScript 中,错打变量名会创立新的全局变量。在严格模式中,此举将抛出错误,这样就不可能不测创立全局变量。
在通常中 JavaScript 假如向不可写属性赋值,开发者不会得到任何错误反应。
在严格模式中,向不可写的、只能读取的、不存在的属性赋值,或者向不存在的变量或对象赋值,将抛出错误。
三、严格模式的限制性
不允许运用未声明的变量:
"use strict";
x = 3.14; // 会出现错误 (x 未定义)
演示一下
"use strict";
x = {p1:10, p2:20}; // 会出现错误 (x 未定义)
演示一下
删除变量或对象不允许。
"use strict";
var x = 3.14;
delete x; // 会出现错误
演示一下
函数是不允许删除。
"use strict";
function x(p1, p2) {};
delete x; // 会出现错误
演示一下
变量重名是不允许的:
"use strict";
function x(p1, p1) {}; // 会出现错误
演示一下
八进制是不允许使用的:
"use strict";
var x = 010; // 会出现错误
演示一下
转义字符是不允许使用:
"use strict";
var x = \010; // 会出现错误
演示一下
只读属性赋值是不允许的:
"use strict";
var obj = {};
Object.defineProperty(obj, "x", {value:0, writable:false});
obj.x = 3.14; // 会出现错误
演示一下
不允许运用写入只读属性
"use strict";
var obj = {get x() {return 0} };
obj.x = 3.14; // 会出现错误
演示一下
不能删除的属性是不允许删除的:
"use strict";
delete Object.prototype; // 会出现错误
演示一下
"eval" 字符串不可运用于变量名:
"use strict";
var eval = 3.14; // 会出现错误
演示一下
"arguments" 字符串不能使用于变量名:
"use strict";
var arguments = 3.14; // 会出现错误
演示一下
不允许使用 with 这种语句:
"use strict";
with (Math){x = cos(2)}; // 会出现错误
演示一下
作用域 eval() 在创建变量不能被调用 是因为一些安全问题:
"use strict";
eval ("var x = 2");
alert (x); // 会出现错误
演示一下
四、关键字的保留
为了Javascript的新版本过渡,严格模式新增加了一些保存关键字:
implements
interface
let
package
private
protected
public
static
yield
"use strict";
var public = 1500; // 会出现错误
演示一下
| "use strict" 指令只能在剧本或函数的开首部位被辨认。 |
---|
五、相关参考文章