JavaScript 严格使用
"use strict";
定义 JavaScript 代码应在 “严格模式”。
“use strict”指令
"use strict"
指令是 ECMAScript 版本 5 中的新指令。
它不是一个语句,而是一个文字表达式,被早期版本忽略 的 JavaScript。
"use strict"
的目的是指示代码应该在“严格模式”下执行。
例如,在严格模式下,不能使用未声明的变量。
除 Internet Explorer 9 及更低版本外,所有现代浏览器都支持“使用严格”:
指令 | |||||
---|---|---|---|---|---|
“use strict” | 13.0 | 10.0 | 4.0 | 6.0 | 12.1 |
表中的数字指定完全支持该指令的第一个浏览器版本。
您可以在所有程序中使用严格模式。它可以帮助您编写更干净的代码, 比如阻止你使用未声明的变量。
"use strict"
只是一个字符串,所以 IE 9 即使不理解它也不会抛出错误。
声明严格模式
严格模式是通过添加 “use strict” 来声明的; 脚本或函数。
在脚本的开头声明,它具有全局范围(所有代码 在脚本中将以严格模式执行):
1 | "use strict"; |
1 | "use strict"; |
在函数内部声明,它具有局部作用域(只有函数内部的代码是 在严格模式下):
1 | x = 3.14; // This will not cause an error. |
“use strict”;语法
用于声明严格模式的语法旨在与 旧版本的 JavaScript。
编译数字文字 (4 + 5;) 或字符串文字 (“John Doe”;) JavaScript 程序没有副作用。它只是编译为不存在的 变量和死亡。
所以"use strict"
;仅对“理解”其含义的新编译器才重要。
为什么选择严格模式?
严格模式使编写“安全”JavaScript 变得更加容易。
严格模式将以前接受的“错误语法”更改为实际错误。
例如,在普通 JavaScript 中,错误键入变量名称会创建一个新的 全局变量。在严格模式下,这将引发错误,使其无法实现 意外创建全局变量。
在普通的 JavaScript 中,开发人员不会收到任何错误反馈 为不可写的属性赋值。
在严格模式下,对不可写属性的任何赋值,仅 getter 属性、不存在的属性、不存在的变量或不存在的变量 对象,将抛出错误。
不允许在严格模式下使用
不允许在不声明变量的情况下使用变量:
1 | "use strict"; |
对象也是变量。
不允许在未声明的情况下使用对象:
1 | "use strict"; |
不允许删除变量(或对象)。
1 | "use strict"; |
不允许删除函数。
1 | "use strict"; |
不允许复制参数名称:
1 | "use strict"; |
不允许使用八进制数字文字:
1 | "use strict"; |
不允许使用八进制转义字符:
1 | "use strict"; |
不允许写入只读属性:
1 | "use strict"; |
不允许写入 get-only 属性:
1 | "use strict"; |
不允许删除不可删除的属性:
1 | "use strict"; |
eval
词不能用作变量:
1 | "use strict"; |
arguments
词不能用作变量:
1 | "use strict"; |
不允许使用with
语句:
1 | "use strict"; |
出于安全原因,不允许eval()
在调用它的范围内创建变量。
1 | "use strict"; |
1 | "use strict"; |
1 | eval ("let x = 2"); |
函数中的this
关键字行为 在严格模式下有所不同。
this
关键字指的是调用该函数的对象。
如果未指定对象,严格模式下的函数将返回undefined
,普通模式下的函数将返回全局对象(window):
1 | "use strict"; |
面向未来!
为将来的 JavaScript 版本保留的关键字不能用作变量 严格模式下的名称。
这些是:
implements
- interface
-
let
-
package
-
private
-
protected
-
public
-
static
-
yield
1 | "use strict"; |
注意!
“use strict”指令仅在脚本的开头被识别 或函数。
0评论