«Strict Mode»-это новый синтаксис, определенный в ECMA-262 Edition 5, указывающий, что его необходимо выполнить с помощью строгого синтаксиса JavaScript. Некоторые используемые методы написания в прошлом будут выброшены исключения синтаксиса, такие как:
1. Нет объявления VAR перед переменной
2. Используйте восьмиугольный синтаксис: var n = 023 и var s = "/047"
3. Использовать с заявлениями
4. Используйте удаление для удаления имени переменной (не имя атрибута): удалить MyVariable
5. Используйте Eval или аргументы в качестве имени переменной или имени функции
6. Используйте будущие зарезервированные слова (возможно, используемые в ECMASCRIPT 6): реализации, интерфейса, пусть, пакет, личный, защищенный, общедоступный, статический и урожайный
7. Использовать объявление функции в блоке оператора: if (a <b) {function f () {}}
8. Другие ошибки
8.1. Используйте два идентичных атрибута в подбодном размере объекта: {a: 1, b: 3, a: 7}
8.2. Используйте два идентичных имена параметров в параметрах функции: функция f (a, b, b) {}
Они подробно объяснены ниже.
1. Зачем использовать «Строгий режим»
Цель установления «строгой модели» в основном заключается в следующем:
1. Устранить некоторые необоснованные и несовершенные аспекты синтаксиса JavaScript и уменьшить некоторые странные поведения;
2. Устранение некоторой неуверенности в запуске кода и обеспечить безопасность запуска кода;
3. повысить эффективность компилятора и повысить скорость работы;
4. Заложить основу для новой версии JavaScript в будущем.
«Строгий режим» отражает более разумное, безопасное и более строгое направление развития JavaScript. Основные браузеры, в том числе IE 10, уже поддерживали его, и многие крупные проекты начали охватывать его полностью.
С другой стороны, один и тот же код может иметь разные результаты работы в «Строгом режиме»; Некоторые утверждения, которые можно запустить в «нормальном режиме», не будут выполняться в «строгом режиме». Освоение этого содержимого поможет вам понять JavaScript более тщательно и глубоко, что сделает вас лучшим программистом.
Эта статья даст подробное введение в «строгую модель».
2. объявить «строгий режим»
Объявление «строгого режима» прост и имеет только одно утверждение:
Кода -копия выглядит следующим образом: «Используйте строго»;
Примечание: более старые браузеры будут рассматривать его как обычную строку и игнорировать ее.
3. Объявите местоположение и контекстуальные отношения «строгого режима»
«Строгий режим» в основном влияет на область применения, где он находится. При использовании в функциях он не станет глобальным объемом и другими неиспользованными функциями в «строгий режим». То есть охват строгого декларации шаблона зависит от его контекста. Если строгий режим объявляется в глобальном контексте (вне объема функции), весь код в программе находится в строгом режиме. Если строгий шаблон объявлен в функции, весь код в функции находится в строгом шаблоне. Например, в следующем примере весь код находится в строгом режиме, а объявления переменной вне функции вызовут синтаксисную ошибку: «переменные не определены в строгом режиме». Есть два способа назвать «строгий режим» и подходят для разных случаев.
1. Для всего файла сценария
Поместите «используйте строго» в первую строку файла сценария, и весь скрипт будет работать в «Стронг режима». Если этот оператор строки не находится на первой строке, он недействителен, а весь скрипт работает в «нормальном режиме». Это требует особого внимания, если кодовые файлы разных режимов объединены в один файл.
(Строго говоря, до тех пор, пока утверждение, которое дает фактический результат выполнения, не предшествует, «использовать строгое» не может быть на первой строке, например, непосредственно после пустой полуколона.)
Кода -копия выглядит следующим образом:
<Скрипт>
«Использовать строго»;
console.log («Это строгий режим»);
</script>
<Скрипт>
console.log («Это нормальный режим»);
</script>
Приведенный выше код указывает на то, что на веб -странице есть две части кода JavaScript. Предыдущий тег сценария - строгий режим, последний - нет.
2. Для одной функции
Поместите «используйте строго» в первую строку тела функции, и вся функция работает в «строгой режиме».
Кода -копия выглядит следующим образом:
функция strict () {
«Использовать строго»;
вернуть "это строгий закономерность.";
}
функция notstrict () {
вернуть "это нормальный режим";
}
3. Обходные пути для файлов сценариев
Поскольку метод первого вызова не способствует слиянию файлов, лучше позаимствовать второй метод и разместить весь файл сценария в анонимную функцию, которая выполняется немедленно.
Кода -копия выглядит следующим образом:
(function () {
«Использовать строго»;
// какой -то код здесь
}) ();
4. Синтаксис и поведение изменяются в «Строгой режиме»
«Строгий режим» внес некоторые изменения в синтаксис и поведение JavaScript.
1. Явное объявление глобальных переменных
В нормальном режиме, при использовании переменных, нам не нужно использовать VAR для объявления (явно объявления), но в строгом режиме мы должны использовать VAR для объявления перед использованием переменных, в противном случае возникнет ошибка.
Кода -копия выглядит следующим образом:
«Использовать строго»;
v = 1; // сообщается об ошибке, V не объявлено
для (i = 0; i <2; i ++) {// Ошибка была сообщена, я не была объявлена
}
Следовательно, в строгом режиме переменные должны быть объявлены с помощью команды VAR перед использованием.
2. Статическое связывание
Особенность языка JavaScript заключается в том, что он позволяет «динамическое связывание», то есть, к которому принадлежат определенные свойства и методы, не определяется во время компиляции, а во время выполнения.
Строгий режим накладывает некоторые ограничения на динамическое привязку. В некоторых случаях разрешено только статическое связывание. Другими словами, какие объекты атрибуты и методы принадлежат, определяется на стадии компиляции. Это поможет повысить эффективность компиляции, упростить чтение кода и меньше аварий.
В частности, задействованы следующие аспекты.
(1) Использование с утверждениями запрещено
Потому что оператор с не может быть определена во время компиляции, которому принадлежит атрибут.
Кода -копия выглядит следующим образом:
«Использовать строго»;
var v = 1;
с (o) {// синтаксическая ошибка
v = 2;
}
(2) Создать область оценки
В нормальном режиме язык JavaScript имеет две переменные рамки: глобальная область и функциональная область. Строгий режим создает третий объем: Eval Scope.
В нормальном режиме объем оператора ENG зависит от того, находится ли он в глобальном объеме или в функциональном объеме. В строгом режиме сам оператор Eval является областью применения и больше не может генерировать глобальные переменные. Переменные, которые он генерирует, могут использоваться только внутри Eval.
Кода -копия выглядит следующим образом:
«Использовать строго»;
var x = 2;
console.info (eval ("var x = 5; x")); // 5
console.info (x); // 2
3. Усовершенствованные меры безопасности
(1) запретить этому ключевому слову указывать на глобальные объекты
Кода -копия выглядит следующим образом:
функция f () {
вернуться! Это;
}
// вернуть ложь, потому что «этот» указывает на глобальный объект »! Это« ложное
функция f () {
«Использовать строго»;
вернуться! Это;
}
// Возврат True, потому что в строгом режиме значение этого не определен, так что «! Это» это правда.
Поэтому при использовании конструктора, если вы забыли добавить новый, это больше не указывает на глобальный объект, но сообщает об ошибке.
Кода -копия выглядит следующим образом:
функция f () {
«Использовать строго»;
this.a = 1;
};
f (); // ошибка, это не определено
В обычной функции вызов f () значение этого будет указывать на глобальный объект. В строгом режиме значение этого будет указывать на неопределенное. Когда функция вызывается через вызов и применить, если параметр этого значения является примитивным значением (строка, число, логическое значение), за исключением нулевого и неопределенного, то значение этого станет объектом обертки, соответствующим исходному значению. Если значение этого параметра этого значения не определен или нулевое, значение этого будет указывать на глобальный объект. В строгом режиме значение этого значения является значением этого параметра этого значения без какого -либо преобразования типа.
(2) запрещено пересекать стек вызовов внутри функции
Кода -копия выглядит следующим образом:
функция f1 () {
«Использовать строго»;
f1.caller; // сообщить об ошибке
f1.arguments; // сообщить об ошибке
}
f1 ();
4. Отключить удаление переменных
Переменные не могут быть удалены в строгом режиме. Только свойства объекта, настраиваемые чьи, настраиваются на True, могут быть удалены.
Кода -копия выглядит следующим образом:
«Использовать строго»;
var x;
Удалить x; // Синтаксическая ошибка
var o = object.create (null, 'x', {
значение: 1,
настраивается: true
});
Удалить OX; // Удалить успешно
5. Явная ошибка
В нормальном режиме, если вы назначаете свойство объекта только для чтения, ошибок не будет, и оно не будет провалиться. В строгом режиме будет сообщена ошибка.
Кода -копия выглядит следующим образом:
«Использовать строго»;
var O = {};
Object.defineproperty (o, "v", {value: 1, writeble: false});
OV = 2; // сообщить об ошибке
В строгом режиме, если вы назначаете свойство, чтение с использованием метода Getter, сообщается об ошибке.
Кода -копия выглядит следующим образом:
«Использовать строго»;
var o = {
Get v () {return 1; }
};
OV = 2; // сообщить об ошибке
В строгом режиме добавление новых атрибутов к объектам, которые запрещены, приведет к ошибке.
Кода -копия выглядит следующим образом:
«Использовать строго»;
var O = {};
Object.preventextensions (o);
OV = 1; // сообщить об ошибке
В строгом режиме удаление свойства Undedet вызовет ошибку.
Кода -копия выглядит следующим образом:
«Использовать строго»;
Удалить object.prototype; // сообщить об ошибке
6. Переименовать ошибку
Строгий режим добавил некоторые синтаксические ошибки.
(1) Объекты не могут иметь атрибуты с дублирующими именами
В нормальном режиме, если объект имеет несколько дубликатов атрибутов, последний назначенный атрибут переопределяет предыдущее значение. В строгом режиме это синтаксическая ошибка.
Кода -копия выглядит следующим образом:
«Использовать строго»;
var o = {
P: 1,
P: 2
}; // Синтаксическая ошибка
(2) Функции не могут иметь параметры с дублирующими именами
В нормальном режиме, если функция имеет несколько параметров с дублирующими именами, ее можно прочитать с помощью аргументов [i]. В строгом режиме это синтаксическая ошибка.
Кода -копия выглядит следующим образом:
«Использовать строго»;
Функция f (a, a, b) {// Синтаксическая ошибка
возвращаться ;
}
7. восьмиугольные обозначения запрещены
В нормальном режиме, если первый бит целого числа составляет 0, это означает, что это восьмиурочное число, например, 0100 равно 64 в десятичном. Строгий режим запрещает это представление. Если первый бит целого числа равен 0, сообщается об ошибке.
Кода -копия выглядит следующим образом:
«Использовать строго»;
var n = 0100; // Синтаксическая ошибка
8. Ограничения объектов аргументов
Аргументы являются параметрами объектов функций, а строгий режим ограничивает его использование.
(1) Присвоение аргументов не допускается
Кода -копия выглядит следующим образом:
«Использовать строго»;
аргументы ++; // Синтаксическая ошибка
var obj = {set p (аргументы) {}}; // Синтаксическая ошибка
try {} catch (аргументы) {} // Синтаксис ошибка
Функция Arguments () {} // Ошибка синтаксиса
var f = новая функция («аргументы», «используйте строго»; return 17; »); // Синтаксическая ошибка
(2) Аргументы больше не отслеживают изменения в параметрах
Кода -копия выглядит следующим образом:
функция f (a) {
a = 2;
вернуть [a, аргументы [0]];
}
f (1); // нормальный режим [2,2]
функция f (a) {
«Использовать строго»;
a = 2;
вернуть [a, аргументы [0]];
}
f (1); // Строгий режим [2,1]
(3) Использование аргументов. Калли запрещено
Это означает, что вы не можете назвать себя анонимной функцией.
Кода -копия выглядит следующим образом:
«Использовать строго»;
var f = function () {return arguments.callee; };
f (); // сообщить об ошибке
9. Функция должна быть объявлена на верхнем уровне
В будущем новые версии JavaScript представит «область на уровне блоков». Чтобы соответствовать новой версии, строгий режим позволяет объявлять функции только на верхнем уровне глобального объема или области функции. То есть не разрешено объявлять функции в нефункциональных блоках кода.
Кода -копия выглядит следующим образом:
«Использовать строго»;
if (true) {
Функция f () {} // Синтаксическая ошибка
}
для (var i = 0; i <5; i ++) {
Функция f2 () {} // Синтаксис ошибка
}
10. Держите слова
Чтобы перейти к новой версии JavaScript в будущем, в строгом режиме были добавлены некоторые зарезервированные слова: реализации, интерфейс, пусть, упаковка, частная, защищенная, публичная, статическая, доходность.
Использование этих слов в качестве имен переменных приведет к ошибке.
Кода -копия выглядит следующим образом:
Функциональный пакет (защищен) {// Синтаксис ошибка
«Использовать строго»;
VAR реализует; // Синтаксическая ошибка
}
Кроме того, пятая версия Ecmascript также предусматривает другие зарезервированные слова (класс, enum, экспорт, расширение, импорт, супер), а также константные слова, добавленные основными браузерами, которые не могут использоваться в качестве имен переменных.