2013-06-25 1 views
0

Какое лучшее решение?Действительно проверить, не определено ли с типом

if(typeof bla === "undefined" || bla === null)... 

Или

if(bla)... 

Если я второе решение, мне действительно нужно, чтобы проверить, является ли его неопределенным?

Спасибо.

+3

Ответ: «Это зависит от того, что именно вы пытаетесь сделать». – karim79

+0

«Действительно проверить, не определено» ... вы имеете в виду это, или вы имеете в виду «неопределенный или нулевой», поскольку вы также проверяете значение null в этих примерах. –

+0

Свойство, если оно не имеет определения, не определено. Положите это, это довольно очевидно. null - объект. Это тип null. undefined не является объектом, его тип не определен. Эта часть менее очевидна. http://stackoverflow.com/questions/6429225/javascript-null-or-undefined –

ответ

3

Это зависит от того, что вы ожидаете от переменной.

Если он должен содержать, например, объект, второй вариант работает отлично, потому что любая ссылка на объект является правдой.

Если оно должно содержать логическое значение, второй вариант не будет работать, потому что false даст тот же результат, что и несуществующее значение.

+0

Так что, проверьте, не определено ли неопределенное, а null - лучшее решение? – Christian

+0

@Christian: Это зависит от того, что вам нужно знать. Существует не идеальный метод, который работает для всех ситуаций.Значение «null» может быть, например, вполне допустимым значением в некоторых ситуациях. – Guffa

0

действительно ли мне нужно проверить, не определено ли это?

Нет, как неопределенные, так и null разрешены на ложные. Второй вариант определенно лучше.

0

Для «проверить, если не определено», лучшее решение, как правило, третья:

Demo

function isDef(obj) { 
    var undefined; 
    return obj === undefined; 
} 

Проверяется, если объект не определен, не теряя времени с typeof и этот тест Безразлично 't утверждать как истину с "", null, NaN или 0 как и ваш второй тест.

Единственная ошибка заключается в том, что кто-то может переопределить глобальный объект undefined. Невозможно в строгом режиме ES5, но ваш код должен защищаться от этого. Shadowing undefined с локальным определением var undefined; делает это для вас.

Также, используя функцию isDef, вы позволяете лучше переносить миниатюру и более простую логику.

if (isDef(x)) { 
    // do something 
} else { 
    // do something else 
}; 
+0

Что делает строка 'var undefined;' add? – smerny

+1

@smerny На мой взгляд, эта линия - бесполезная защита. Поскольку undefined не может быть переопределен в глобальной области, проще и умнее просто проверять obj === undefined. –

Смежные вопросы