Присвоение примитивов JavaScript их названной эквивалентной переменной, например "константы"
Я смотрел исходный код qTip 2 и видел следующее:
// Munge the primitives - Paul Irish tip
var TRUE = true,
FALSE = false,
NULL = null;
Я не могу придумать причину, по которой вы должны это делать, и испытываете сильное чувство, что это будет просто поощрять неправильные привычки кодирования. Скажем, разработчик делает опечатку в состоянии Yoda, например if (TRUE = someCondition())
, тогда TRUE
вполне может в конечном итоге означать false
, или вы можете в конечном итоге назначить someObject
на NULL
.
Я думаю, мне просто интересно, есть ли какое-то качество для этой практики, которое мне не хватает, или если это просто простой Bad Idea ™
Ответы
Ответ 1
Цель этого - просто улучшить компрессию, сам Пол Ирланд называет его "Анти-Шаблон".
Он описывает это как "Хорошо для сжатия и обхода цепочки объектов" в следующем представлении:
При обходе цепочки объектов мы не увидим улучшения в литературе как null
, false
, true
, так как цепочка областей не проверена, они просто литералы.
В других идентификаторах как undefined
или windows
обход цепочки объектов действительно проверяется.
![Paul Irish Anti-patterns slide 55]()
Ответ 2
Вы можете сделать это ради сжатия кода. Например, YUI Compressor не будет касаться true
и false
, но он может заменить все вхождения, например, true
, с помощью A
, сохраняя четыре символа на каждом вхождении. Например, перед сжатием:
if (foo === null) {
bar = true;
}
После сжатия, если компрессор заменяет true
на A
и NULL
на c
:
if(foo===c){bar=a;}
В сравнении с этим после сжатия без "перебора примитивов":
if(foo===null){bar=true;}
Опасность плохого кодирования, которую вы вполне правильно цитируете в своем вопросе, может перевесить небольшую экономию дополнительного сжатия. Это зависит от того, насколько отчаянно вам нужно сохранить несколько десятков или, возможно, несколько сотен байт.
Лично я бы (почти) никогда этого не делал. Слишком опасно.
Ответ 3
Я считаю, что это рекомендуется для сжатия.
Эти сокращенные переменные будут сжиматься при запуске, что приведет к уменьшению количества файлов. Тем не менее, ваши отмеченные недостатки, безусловно, являются действительными точками!