English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

JavaScript基础教程

JavaScript 对象

JavaScript 函数

JS HTML DOM

JS 浏览器BOM

AJAX 基础教程

JavaScript 参考手册

Точный режим (use strict) JavaScript

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

Будущие версии ECMAScript могут ввести новые синтаксисы, строгий режим в ES5 применяет некоторые ограничения для упрощения перехода.

Если основанием для禁止 этих изменений в строгом режиме является более легкое выполнение некоторых изменений, то это сделать будет легче.

В строгом режиме, следующий список идентификаторов становится резервируемыми ключевыми словами:

  • implements

  • interface

  • let

  • package

  • private

  • protected

  • public

  • static

  • yield

"use strict";
var package = true; // Это вызовет ошибку
Проверьте, как это работает‹/›