Безопасно ли использовать "безопасные сайты для жизни"?
"использовать строгий"; кажется удивительным, и мы действительно хотели бы использовать его в нашем магазине. Однако мы просто хотим, чтобы мы (разработчики) могли находить проблемы строгости; мы очень НЕ хотим, чтобы наш сайт нарушил наши фактические клиенты, когда он работал нормально раньше.
Теперь мы могли бы использовать некоторую серверную логику для этого:
{% if debug %}<script>"use strict";</script>{% endif %}
... за исключением того, что "use strict" работает по файловому принципу, поэтому на самом деле это не будет работать (ну, если мы не начнем обработку на стороне сервера всех наших JS файлов).
Итак, мой вопрос: делать все, что "использует строгие" проверки для проверки, когда загружается страница, или можно "использовать строгое" для поиска ошибок после загрузки страницы? Если это первый, мы можем просто использовать "использовать строгую" и перестать беспокоиться, потому что мы загрузим наш сайт в разработке, прежде чем загружать его в прямом эфире. Однако, если это последнее, нам кажется, что нам не повезло, так как мы не можем проверить все возможные условия выполнения (и снова мы не хотим делать ошибки для наших пользователей, если раньше не было ошибок).
Ответы
Ответ 1
Это последнее. Во время strict mode
интерпретатор Javascript может вызывать сообщения об ошибках во время выполнения, которые не будут выбрасываться в нестрогий режим.
С другой стороны, большинство из этих ошибок являются "хорошими ошибками", а это значит, что они фактически не помогут вам нарушить ваш код.
Например
function foo() {
"use strict";
bar = true;
}
foo();
Это бросит
"ReferenceError: assignment to undeclared variable bar"
в строгом режиме, который является хорошим. В нестандартном режиме мы бы просто создали глобальную переменную с именем bar
, которая, вероятно, не того, что мы хотели. Существует множество других ситуаций, в которых strict mode
препятствует программисту делать что-то глупое/плохое/нежелательное и выдает сообщения об ошибках. Но опять же, вы хотите иметь эти ошибки вместо каких-то странных ошибок.
Прочтите далее MDN
Ответ 2
Если я правильно вас понимаю, да, это определенно возможно для строгого режима, чтобы ловить ошибки после загрузки страницы. Например:
<Предварительно > 'use strict';
setTimeout(function() {
undefined = 42; // Causes a TypeError
}, 1000);
//Щелкните здесь для демонстрации
.
То, что вы можете сделать, довольно просто: вы должны минимизировать свой JavaScript, когда вы все равно перейдете на производство. Просто убедитесь, что 'use strict'
удаляется во время процесса миниатюры.
В противном случае попробуйте убедиться, что ваш код строго-безошибочный. Строгий режим обычно вступает в игру в отношении семантики, а не из-за чего-то странного ввода пользователя или даже из-за синтаксиса. Не должно быть слишком сложно поймать все случаи. (Но минимизация и удаление 'use strict'
- гораздо лучшее решение.)