var foo;

console.log(typeof foo); //"undefined"

if(typeof foo === 'undefined')
    console.log(1);

if(!foo)
    console.log(2);

В моем примере выше консоль будет регистрировать как «1», так и «2», поскольку undefined оценивается как false. То же самое произойдет с null, NaN, "" (пустая строка) и т. Д.

Является ли использование оператора typeof более распространенным для сравнения строкового значения вместо использования оцененного логического значения? Есть ли разница кроме читабельности? Есть плюсы и минусы?

0
Johan 25 Янв 2013 в 13:45
Второй способ приведет к сбою, если переменная не была объявлена.
 – 
nnnnnn
25 Янв 2013 в 13:52

1 ответ

Лучший ответ

Нет серебряной пули, и это полностью зависит от ваших целей.

Если вам нужно знать, что переменная является "ложной" - вы используете if (!var), если вам нужно точно знать, null, 0, пустая строка или что-то еще - вы используете if (var === null)

4
zerkms 25 Янв 2013 в 13:47
Что насчет оператора typeof тогда? typeof foo === 'null' против foo === null
 – 
Antony
25 Янв 2013 в 13:50
Тип foo никогда не будет "null", только "undefined" или "object" и т. Д. Причина использования typeof вместо === заключается в том, что он позволяет вам проверять наличие необъявленных переменных. test === undefined вызовет ошибку ReferenceError, если нет тестовой переменной, а typeof test вернет "undefined".
 – 
Matt Zeunert
25 Янв 2013 в 13:55
Спасибо за информацию.
 – 
Antony
25 Янв 2013 в 13:56
1
Иногда вы просто хотите провести различие между пустой строкой, нулем или 0.
 – 
Yoshi
25 Янв 2013 в 14:00
2
Одна из распространенных ситуаций, когда !var обычно избегают, - это передача необязательных параметров функции. Если параметр не определен, вы будете использовать значение параметра по умолчанию, если это что-то вроде пустой строки, вы будете использовать это вместо этого.
 – 
Matt Zeunert
25 Янв 2013 в 14:09