English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
ECMAScript 5中引入的JavaScript严格模式是选择加入 JavaScript受限变体的一种方式。
严格模式不仅仅是一个子集:它有意地具有与普通代码不同的语义。
严格模式使编写“安全” JavaScript更加容易。
严格模式将以前接受的“错误语法”更改为实际错误。
在严格模式下,例如,您不能使用未声明的变量。
严格模式是通过"use strict";在脚本或函数的开头添加来声明的。
要为整个脚本调用严格模式,在任何其他任何声明之前,输入语句“use strict” ::
"use strict"; str = "嗨,我是严格模式脚本!"; // 导致错误,因为未声明strПроверьте, как это работает‹/›
Чтобы применить строгий режим к вызову функции, поместите точное предложение "use strict" в тело функции, затем перед другими любыми предложениями:
function myFunc() { // Грамматика строгого режима на уровне функции "use strict"; str = "大家好,我是严格模式函数!"; // Это приведет к ошибке return str; }Проверьте, как это работает‹/›
Строгий режим помогает вам написать более краткое код, например, предотвращая использование неявно объявленных переменных.
Инструкцию "use strict" можно распознать только в начале скрипта или функции.
Грамматика с одинарными и двойными кавычками оба они принимаются ('use strict'; или "use strict";).
Как вам известно, в строгом режиме все переменные должны быть объявлены.
Если присваивать значение не объявленному идентификатору, возникает ошибка ReferenceError:
"use strict"; x = 5; // ReferenceError: x не определенПроверьте, как это работает‹/›
Запрещается использовать не задекларированные объекты (объекты также являются переменными):
"use strict"; coord = {x: 10, y: 20}; // ReferenceError: coord не определенПроверьте, как это работает‹/›
В строгом режиме при попытке удалить переменную возникает синтаксическая ошибка:
"use strict"; var msg = "Hello World"; delete msg; // SyntaxErrorПроверьте, как это работает‹/›
Таким же образом, при попытке удалить функцию в строгом режиме возникает синтаксическая ошибка:
"use strict"; function sum(a, b) { return a + b; } delete sum; // SyntaxErrorПроверьте, как это работает‹/›
В строгом режиме не разрешается повторение имен параметров:
"use strict"; function square(a, a) { // SyntaxError return a * a; }Проверьте, как это работает‹/›
В строгом режиме не разрешается写入 только чтение свойств:
"use strict"; var person = {name: "Akash", age: 22}; Object.defineProperty(person, "gender", {value: "male", writable: false}); person.gender = "female"; // TypeErrorПроверьте, как это работает‹/›
В строгом режиме не разрешается использовать предложение with:
"use strict"; with (Math) {x = sqrt(25)}; // SyntaxErrorПроверьте, как это работает‹/›
В строгом режиме不允许使用 восьмеричное число:
"use strict"; var x = 010; // SyntaxErrorПроверьте, как это работает‹/›
Из соображений безопасностиeval()Запрещается создавать переменные в диапазоне вызова, в котором они определены:
"use strict"; eval("var x = 10;"); console.log(x); // ReferenceError: переменная x не определенаПроверьте, как это работает‹/›
Строка "eval" не может использоваться в качестве идентификатора (имени переменной):
"use strict"; var eval = "oldtoolbag.com";// SyntaxErrorПроверьте, как это работает‹/›
Строка "arguments" не может использоваться в качестве идентификатора (имени переменной):
"use strict"; var arguments = "oldtoolbag.com";// SyntaxErrorПроверьте, как это работает‹/›
Будущие версии ECMAScript могут ввести новые синтаксисы, строгий режим в ES5 применяет некоторые ограничения для упрощения перехода.
Если основанием для禁止 этих изменений в строгом режиме является более легкое выполнение некоторых изменений, то это сделать будет легче.
В строгом режиме, следующий список идентификаторов становится резервируемыми ключевыми словами:
implements
interface
let
package
private
protected
public
static
yield
"use strict"; var package = true; // Это вызовет ошибкуПроверьте, как это работает‹/›