typeof! == "undefined" против! = null - PullRequest
461 голосов
/ 24 апреля 2010

Я часто вижу код JavaScript, который проверяет неопределенные параметры и т. Д. Таким образом:

if (typeof input !== "undefined") {
    // do stuff
}

Это кажется расточительным, поскольку включает как поиск типов, так и сравнение строк, не говоря уже о его многословности. Это необходимо, потому что «undefined» может быть переименован. Мой вопрос: как этот код лучше, чем этот подход:

if (null != input) {
    // do stuff
}

Насколько я знаю, вы не можете переопределить нуль, поэтому он не сломается неожиданно. И из-за приведения типов оператора! = Это проверяет как неопределенное, так и нулевое ... что часто именно то, что вы хотите (например, для необязательных параметров функции). Тем не менее, эта форма не кажется широко распространенной, и она даже заставляет JSLint кричать на вас за использование оператора evil! =. Почему это считается плохим стилем?

Ответы [ 11 ]

0 голосов
/ 24 апреля 2010
if (input == undefined) { ... }

работает просто отлично. Это, конечно, не сравнение null, но я обычно нахожу, что если мне нужно провести различие между undefined и null, мне, скорее, нужно различать undefined и просто любое ложное значение, поэтому

else if (input) { ... }

делает это.

Если программа переопределяет undefined, то это действительно мозговая смерть.

Единственная причина, по которой я могу придумать, заключалась в совместимости с IE4, он не понимал ключевое слово undefined (которое, к сожалению, на самом деле не является ключевым словом), но, конечно, значения могут быть undefined , так что вы должны были иметь это:

var undefined;

и приведенное выше сравнение будет работать нормально.

Во втором примере вам, вероятно, нужны двойные скобки, чтобы сделать ворс счастливым?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...