проверка javascript на ненулевой


134

Ниже приведен фрагмент кода, из которого мы получаем значение формы. Перед дальнейшей обработкой проверьте, не является ли значение нулевым.

var val = document.FileList.hiddenInfo.value;
alert("val is " + val);  // this prints null which is as expected
if (val != null)
{
   alert("value is "+val.length); // this returns 4
}
else
{
   alert("value* is null");
}

Есть идеи, почему это происходит так .. ??


2
CW произошло из-за того, что вопрос редактировали 6+ пользователей.
ВЫ

! == вместо! =
GetBackerZ

Ответы:


78

Это потому, что val нет null, но содержится 'null'в виде строки.

Попробуйте проверить с помощью 'null'

if ('null' != val)

Для объяснения того, когда и почему это работает, см. Подробности ниже .


2
должно быть, если (null! = val) почему-то он не работал с кавычками
Ананда

Мистер x в вопросе, null было как строка ... ваш случай, вероятно, другой
Арсен Мкртчян

146

это поможет вам

if (!!val) {
    alert("this is not null")
} else {
    alert("this is null")
}

22
хотя технически это работает, двойное не (!!) - это программная ошибка. Это действительно эквивалент if(val), который гораздо понятнее читать. Я бы придерживался этого (fyi Ujwal, !! val технически также должен работать на C или C ++) см. Здесь для значений «правдивости» javascript: janosch.woschitz.org/javascript-equality-comparison
Will Buck

2
как насчет if (! Boolean (val))
thedjaney 01

1
!! - это просто двойное отрицание, поэтому он буквально говорит, если (val.exists). Хотя мне все еще нравится, как это выглядит!
Kurai Bankusu

12
это будет ошибкой , если val = 0так !!0соответствует значению ЛОЖЬ
punkrockpolly

3
Это не просто двойной негатив. Это трансформирующий двойной негатив. Вы в основном преобразуете переменную в логическое значение. Там очень много говорить на эту тему , но достаточно сказать , что в тех случаях , когда ваш переменный 0, false, null, undefinedили некоторые такие значения , которые ПОСТАНОВЛЯЮТ trueс одним!, Вы собираетесь получить falseза !!. Его следует использовать с осторожностью, если вообще.
Гай Пасси,

84

Есть 3 способа проверить "не нуль". Я рекомендую использовать Strict Not Version.

1. Строгая не версия

if (val !== null) { ... }

Версия Strict Not использует "алгоритм сравнения строгого равенства" http://www.ecma-international.org/ecma-262/5.1/#sec-11.9.6 . Он !==имеет более высокую производительность, чем !=оператор, поскольку алгоритм сравнения строгого равенства не выполняет приведение типов значений.

2. Нестрогий вариант Not Version

if (val != 'null') { ... }

В нестрогой версии используется «алгоритм сравнения абстрактного равенства» http://www.ecma-international.org/ecma-262/5.1/#sec-11.9.3 . Производительность оператора !=ниже, чем у !==оператора, поскольку алгоритм сравнения абстрактного равенства приводит значения типов.

3. Версия Double Not

if (!!val) { ... }

Версия Double Not !!имеет более высокую производительность, чем версия Strict Not и Версия !==Non-Strict Not !=( https://jsperf.com/tfm-not-null/6 ). Тем не менее, он будет преобразовывать значения типа "Falsey", например, undefinedи NaNв False ( http://www.ecma-international.org/ecma-262/5.1/#sec-9.2 ), что может привести к неожиданным результатам, а также имеет худшую читаемость, поскольку nullпрямо не указано.


Это очень странно. !!valработал у меня, но val!==nullне работал . Почему это?
TheLogicGuy 02

@TheLogicGuy - Что это за тип данных val? console.log(typeof val),
tfmontague

число. код удаляет "плохие" значения из массива (null, 0 и т. д.). Вот код: pastebin.com/L7Z1BtuL
TheLogicGuy 06

1
@TheLogicGuy - Ваша настоящая проблема не имеет ничего общего с null. NaN не фильтрует правильно - это всегда будет возвращать истину. Это должно работать:! (IsNaN (val) && (typeof val! == "undefined")). В Javascript есть такие понятия, как «Истина» и «Ложь». Оператор double-not !!удалит больше, чем просто null. Он также преобразует NaNи undefinedв ложь. Вот почему ваш массив правильно фильтрует при использовании двойного оператора not !!.
tfmontague 06

30

Использование !==as !=приведет вас в мир странностей с нетранзитивной таблицей истинности JavaScript.


Если вы не хотите специально проверять undefinedили null. В этом случае val != nullбудет возвращаться trueк undefinedили , nullно не для других значений falsey как 0.
Eric H

8

Вы должны использовать not equalsоператор строгого сравнения, !==чтобы при вводе пользователем "null"вы не попали в else.


1
Сьюзан
Налл не

5

Возможно, потому, что значение valфактически является строкой, "null"а не значением null.


3

Это должно работать нормально ..

   if(val!= null)
    {
       alert("value is "+val.length); //-- this returns 4
    }
    else
    {
       alert("value* is null");
    }


1

Это будет работать:

if (val) {
    alert("Not null");
} else {
    alert("Null");
}

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.