В этой статье вы найдете необходимые знания о JavaScript, в которых в основном рассматриваются проблемы, связанные со строгим режимом. Строгий режим легко понять. Это ограничительный режим JavaScript, который неявно отделяет код от «ленивого режима», давайте посмотрим. надеюсь, это будет полезно всем.
[Рекомендации по теме: видеоурок по JavaScript, веб-интерфейс]
В стандарте ECMAScript5 JavaScript предложил концепцию строгого режима:
Строгий режим легко понять: это ограничительный режим JavaScript, который заставляет код неявно выходить из «ленивого режима».
Когда браузер, поддерживающий строгий режим, обнаруживает строгий режим в коде, он будет обнаруживать и выполнять код более строгим образом.
Строгий режим накладывает некоторые ограничения на обычную семантику JavaScript:
Строгий режим устраняет некоторые исходные молчаливые ошибки , выдавая их .
Строгий режим позволяет движку JS выполнять больше оптимизации при выполнении кода (без необходимости иметь дело с каким-то специальным синтаксисом).
Строгий режим отключает некоторый синтаксис, который может быть определен в будущих версиях ECMAScript.
Так как же включить строгий режим? Строгий режим поддерживает детальную миграцию:
Может поддерживать включение строгого режима в файлах js;
Он также поддерживает включение строгого режима для определенной функции;
JavaScript спроектирован так, чтобы его было проще использовать начинающим разработчикам, поэтому иногда он имеет неправильный синтаксис, но не думайте, что его можно нормально проанализировать;
Однако этот метод может создать угрозу безопасности;
В строгом режиме такая транзакция будет рассматриваться как ошибка, поэтому ее можно будет быстро обнаружить и исправить;
Вот краткий обзор некоторых распространенных ограничений:
Есть два способа случайно создать глобальные переменные:
Глобально объявляйте глобальные переменные напрямую, без использования ключевых слов.
Если вы объявите переменную без использования ключевых слов внутри функции, функция по умолчанию будет преобразована в глобальную переменную. Пример кода выглядит следующим образом:
«используйте строгий» // Отключаем случайное создание глобальных переменных message = 'Случайное создание глобальных переменных' console.log(message) //Сообщение об ошибке: Uncaught ReferenceError: сообщение не определено функция foo () { возраст=20 console.log(возраст) } foo() // Ошибка ссылки: возраст не определен
Пример кода выглядит следующим образом:
//Включаем строгий режим и преобразуем проблему непосредственно в ошибку «использовать строгий» const v = 100;//(определить константу) v = 1.14; //Переназначаем значение (переменной) console.log(v); // Неперехваченная ошибка типа: присвоение постоянной переменной.
В строгом режиме вы не можете использовать оператор отмены выбора для переменных.
// Включаем строгий режим 'use strict' вар v = 100; delete v;//В нестрогом режиме: это тихий сбой, ни об ошибке не сообщается, ни переменная v не удаляется. console.log(v);//100 //После включения строгого режима вместо этого выдается сообщение об ошибке Удаление неполного идентификатора в строгом режиме.
В строгом режиме использование ключевого слова delete для атрибутов массивов и методов имеет тот же эффект.
// Включаем строгий режим 'use strict' // 1. Удалить содержимое массива в строгом режиме var arr = [1,2,3,4] удалить arr[0]; console.log(arr);//[ <1 пустой элемент>, 2, 3, 4 ] // 2. Атрибуты функции удаления в строгом режиме var obj = { название: 'Человек-Свинья' } удалить имя объекта; console.log(obj.name)//не определено
Пример кода выглядит следующим образом:
«используйте строгий» // Функции с одинаковым именем параметра не разрешены function foo2 (x, y, x) { console.log(x, y, x) } foo2(10, 20, 30) // SyntaxError: дублирование имени параметра не разрешено в этом контексте
Пример кода выглядит следующим образом:
// Исходный восьмеричный формат var num1 = 0123 не допускается var num2 = 0o123 // Может быть записано в восьмеричном формате var num3 = 0x123 // Может быть записано в шестнадцатеричном формате var num4 = 0b100 // Может быть записано в этом формате как двоичное console.log(num1) // SyntaxError: Восьмеричные литералы не допускаются в строгом режиме. console.log(num2, num3, num4) // 83 291 4
Пример кода выглядит следующим образом:
«используйте строгий» var message = 'Привет, мир'; var obj = { name: 'jam', возраст: 20 } //Инструкция with может формировать свою собственную область действия. При печати age в инструкции with будет выведен атрибут age в объекте obj. Однако, когда несуществующее сообщение атрибута будет напечатано в инструкции with, оно будет напечатано. один уровень до внешней области видимости. Один уровень для поиска функции foo () {. с (объект) { console.log(возраст) console.log(сообщение) } console.log(сообщение) } foo() // SyntaxError: код строгого режима не может включать оператор with
Пример кода выглядит следующим образом:
var jsString = "var message = 'привет, мир';console.log(message)" eval(jsString) // Вывод здравствуй, мир console.log(message) //Сообщение об ошибке: ReferenceError: сообщение не определено
开启严格模式eval函数不会向上引用变量所以全局作用域就没有message这个变量所以会报错
Пример кода выглядит следующим образом:
«используйте строгий» // В строгом режиме самоисполняющаяся функция (привязка по умолчанию) будет указывать на неопределенное, а в нестрогом режиме — на окно функция foo () { console.log(это) } foo() // не определено