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 无法理解它,也不会抛出错误。
声明严格模式
严格模式通过添加 “严格使用”; 到脚本或函数的开头。
在脚本开头声明,具有全局作用域(脚本中的所有代码都将在严格模式下执行):
在函数内部声明,具有局部作用域(只有函数内部的代码处于严格模式):
x = 3.14; // 这不会导致错误。
我的功能();
函数 myFunction() {
“严格使用”;
y = 3.14; // 这将导致错误
}
亲自尝试 »
“use strict”; 语法
声明严格模式的语法旨在与旧版本的 JavaScript 兼容。
在 JavaScript 程序中编译数字文字 (4 + 5;) 或字符串文字 ("John Doe";) 没有任何副作用。它只是编译为不存在的变量并终止。
所以 "use strict";
只对“理解”其含义的新编译器才重要。
为什么选择严格模式?
严格模式使得编写“安全”的 JavaScript 变得更加容易。
严格模式将先前接受的“错误语法”转变为真正的错误。
例如,在普通 JavaScript 中,错误输入变量名会创建一个新的全局变量。在严格模式下,这将引发错误,从而不可能意外创建全局变量。
在正常的 JavaScript 中,开发人员不会收到任何为不可写属性分配值的错误反馈。
在严格模式下,对不可写属性、仅 getter 属性、不存在的属性、不存在的变量或不存在的对象的任何赋值都将引发错误。
严格模式下不允许
不允许使用未声明的变量:
“严格使用”;
x = 3.14; // 这将导致错误
亲自尝试 »
不允许使用未声明的对象:
“严格使用”;
x = {p1:10, p2:20}; // 这将导致错误
亲自尝试 »
不允许删除变量(或对象)。
“严格使用”;
设 x = 3.14;
delete x; //这将导致错误
亲自尝试 »
不允许删除功能。
“严格使用”;
函数 x (p1, p2) {};
delete x; //这将导致错误
亲自尝试 »
不允许重复参数名称:
“严格使用”;
function x(p1, p1) {}; // 这将导致错误
亲自尝试 »
不允许使用八进制数字文字:
“严格使用”;
let x = 010; // 这将导致错误
亲自尝试 »
不允许使用八进制转义字符:
“严格使用”;
let x = "\010"; // 这将导致错误
亲自尝试 »
不允许写入只读属性:
“严格使用”;
const obj = {};
Object.defineProperty(obj,“x”, {值:0,可写:false});
obj.x = 3.14; // 这将导致错误
亲自尝试 »
不允许写入只读属性:
“严格使用”;
const obj = {获取 x() {返回 0} };
obj.x = 3.14; // 这将导致错误
亲自尝试 »
不允许删除不可删除的属性:
“严格使用”;
delete Object.prototype; //这将导致错误
亲自尝试 »
这个单词 eval
不能用作变量:
“严格使用”;
let eval = 3.14; // 这将导致错误
亲自尝试 »
这个单词 arguments
不能用作变量:
“严格使用”;
let parameters = 3.14; // 这将导致错误
亲自尝试 »
这 with
不允许声明:
“严格使用”;
with (Math){x = cos(2)}; // 这将导致错误
亲自尝试 »
出于安全原因, eval()
不允许在调用它的范围内创建变量:
“严格使用”;
eval ("让 x = 2");
alert (x); //这将导致错误
亲自尝试 »
这 this
函数中的关键字在严格模式下的行为有所不同。
这 this
关键字指的是调用该函数的对象。
如果未指定对象,严格模式下的函数将返回 undefined
正常模式下的函数将返回全局对象(窗口):
“严格使用”;
函数 myFunction() {
alert(this); // 将提示“未定义”
}
我的功能();
亲自尝试 »
面向未来!
为未来 JavaScript 版本保留的关键字在严格模式下不能用作变量名。
这些都是:
- 实现
- 界面
- 让
- 包裹
- 私人的
- 受保护
- 民众
- 静止的
- 屈服
“严格使用”;
let public = 1500; // 这将导致错误
亲自尝试 »
小心!
“use strict”指令仅在 开始 脚本或函数。