Что использует строгий; значит в Javascript

Строгий режим вносит несколько изменений в способ обработки Javascript интерпретатором. Строгий режим устраняет некоторые тихие ошибки JavaScript, изменяя их на выдачу ошибок. Строгий режим исправляет ошибки, мешающие движкам JavaScript выполнять оптимизацию: иногда код строгого режима может выполняться быстрее, чем идентичный код, который не является строгим режимом, и запрещает некоторый синтаксис, который может быть определен в будущих версиях ECMAScript (т. Е. Классы и т. Д.) ,

Строгий режим относится ко всем сценариям или же к отдельным функциям. Это не относится к операторам блока, заключенным в {}; попытка применить его к таким контекстам ничего не делает. В основном то, что использует строгий, — это введение лучшей проверки ошибок в ваш код.

Строгий режим можно включить, добавив строку со следующим содержимым поверх вашего скрипта «use strict»; т.е.

В теге сценария или указанном файле:


"use strict";
// Execute some script strictly

На функции (анонимный или не анонимный)

(function(){"use strict";
// All the code will be analyzed in strict mode
})();
function myAction(){
"use strict";
// Threat me strictly
}

Предотвратить дубликаты в объекте

Следующий объект имеет 2 свойства с одинаковым именем:

var myObject = {
hello:"A string",
anotherProperty:2,
other:"Hi",
hello:"A string"
};

Без в строгом режиме объект будет иметь свойство, но с последним объявленным значением. С строгий режим, JS интерпретатор скинет Uncaught SyntaxError: Duplicate data property in object literal not allowed in strict mode,

Использование с заявлением запрещено

Использование оператора with в строгом режиме:

"use strict";
var a, x, y;
var r = 10;
with (Math) {
a = PI * r * r;
x = r * cos(PI);
y = r * sin(PI / 2);
}

Бросит Uncaught SyntaxError: Strict mode code may not include a with statement, Использование оператора with не рекомендуется, как это может быть источником запутанных ошибок и проблем совместимости.

Предотвращает объявление глобальной переменной

Объявление глобальной переменной в области действия запрещено, например:

var history = [];
function ExecuteSomething(message){
// Note that the code doesnt use => var toSaveInHistory, therefore there is an error
toSaveInHistory = message;
return console.log(message);
}
ExecuteSomething("My custom log");

Предыдущий код бросил бы Uncaught ReferenceError: toSaveInHistory is not defined потому что действительно toSaveInHistory не объявлен в закрытии. Строгий режим запрещает неявное создание глобального свойства.

Предотвращает использование зарезервированного ключевого слова в качестве имени переменной

Использование будущего зарезервированного слова для идентификатора недопустимо. Имя идентификатора зарезервировано в строгом режиме, т.е.

  • инвентарь
  • интерфейс
  • пакет
  • частный
  • защищенный
  • общественности
  • статический
  • Уступать

Аргументы в качестве идентификатора или изменения переменной Arguments

В строгом режиме переменная «arguments» (которая идентифицируется как массив во всех функциях, эта переменная содержит все аргументы, которые были отправлены на выполнение функции, нельзя использовать в качестве идентификатора (имя переменной или функции, имя параметра и т. д.), а также не изменять значения членов локального объекта аргументов, т.е.

"use strict";
var arguments = "something";
// Throws => Invalid usage of 'arguments' in strict mode
// or
function executeSomething(age,name){
arguments[0] = 12;
return true;
}
executeSomething(15,"Batman");

Переменная, объявленная внутри функции eval

Если переменная объявлена ​​внутри функции eval, она не может использоваться вне этой функции, т.е.

eval("var myVariable = 10;");
document.write(myVariable);

Предыдущий код бросает 'myVariable' is undefined,

Запрещает восьмеричный синтаксис

Присвоение восьмеричного значения числовому литералу или попытка использовать экранирование восьмеричного значения не допускается, т.е.

var myOctal = 012;
var myEscapedOctal = \012;

Предыдущий код бросает Octal numeric literals and escape characters not allowed in strict mode,

Расширение нерасширяемого свойства объекта

Без строгого режима многие вещи игнорируются, так как добавление свойства к нерасширяемому объекту ничего не даст. Но если включен строгий режим, вы получите исключение, т.е.

var myItem = {};
Object.preventExtensions(myItem);
myItem.otherProperty = 222;

Предыдущий код бросает Cannot create property for a non-extensible object,

Поддерживаемые браузеры

В настоящее время строгое использование поддерживается всеми основными браузерами (кроме IE 9 и ниже). Для получения дополнительной информации см. Могу ли я использовать использовать строгий. Однако в Интернете есть много мест, где они говорят, что использовать строгий режим в ie8 или 9 не проблема., если ты все еще сомневаешься, просто доверься Microsoft :

Ссылка на основную публикацию
Adblock
detector