Ответ 1
Это потому, что val не null
, но содержит 'null'
как строку.
Попробуйте установить флажок "null"
if ('null' != val)
Ниже приведен фрагмент кода, где мы извлекаем значение формы. Перед дальнейшей обработкой проверьте, не имеет ли значение значение null.
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");
}
Любые идеи, почему это происходит так.??
Это потому, что val не null
, но содержит 'null'
как строку.
Попробуйте установить флажок "null"
if ('null' != val)
это сделает трюк для вас
if (!!val) {
alert("this is not null")
} else {
alert("this is null")
}
Используйте !==
, поскольку !=
превратит вас в мир непереходной безызвестной таблицы истины JavaScript.
Есть три способа проверить "не null". Моя рекомендация - использовать Strict Not Version.
if (val !== null) { ... }
В Strict Not Version используется "Алгоритм сравнения строгого равенства" http://www.ecma-international.org/ecma-262/5.1/#sec-11.9.6. !==
имеет более высокую производительность, чем оператор !=
, потому что алгоритм сравнения строгих равенств не имеет значений типа.
if (val != 'null') { ... }
Нестрогая версия использует "Алгоритм сравнения абстрактного равенства" http://www.ecma-international.org/ecma-262/5.1/#sec-11.9.3. !=
имеет более низкую производительность, чем оператор !==
, потому что алгоритм сравнения абстрактного равенства сравнивает значения.
if (!!val) { ... }
Двойная не версия !!
имеет более высокую производительность, чем как строгая не версия !==
, так и нестрогая версия !=
(https://jsperf.com/tfm-not-null/6). Тем не менее, он будет определять значения "Falsey", такие как undefined
и NaN
, в False (http://www.ecma-international.org/ecma-262/5.1/#sec-9.2), что может привести к неожиданным результатам, и он имеет более высокую читаемость, поскольку null
явно не указано.
Вы должны использовать строгий оператор сравнения not equals
!==
, чтобы, если пользователь вводит "null"
, вы не попадете в else
.
Возможно, потому что значение val
на самом деле является строкой "null"
, а не значением null
.
Если вы хотите включить 0 в качестве допустимого значения:
if (!!val || val === 0) { ... }
Это должно работать нормально.
if(val!= null)
{
alert("value is "+val.length); //-- this returns 4
}
else
{
alert("value* is null");
}
Это будет работать:
if (val) {
alert("Not null");
} else {
alert("Null");
}