Этот оператор if не должен определять 0; только пустые или пустые строки

Используя JavaScript, как я НЕ обнаруживаю 0, но в противном случае обнаруживаю нулевые или пустые строки?

Ответ 1

Из названия вопроса:

if( val === null || val == "" )

Я могу только видеть, что вы забыли = при попытке строгого равенства-сравнить val с пустой строкой:

if( val === null || val === "" )

Тестирование с помощью Firebug:

>>> 0 === null || 0 == ""
true

>>> 0 === null || 0 === ""
false

РЕДАКТИРОВАТЬ: см. комментарий CMS для объяснения.

Ответ 2

Если вы хотите обнаружить все значения false, кроме нуля:

if (!foo && foo !== 0) 

Таким образом, это обнаружит null, пустые строки, false, undefined и т.д.

Ответ 3

Если я правильно понял, вы хотели обнаружить непустую строку?

function isNonEmptyString(val) {
  return (typeof val == 'string' && val!='');
}
/*
  isNonEmptyString(0); // returns false
  isNonEmptyString(""); // returns false
  isNonEmptyString(null); // returns false
  isNonEmptyString("something"); // returns true
*/