Ниже приведен фрагмент кода, из которого мы получаем значение формы. Перед дальнейшей обработкой проверьте, не является ли значение нулевым.
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");
}
Есть идеи, почему это происходит так .. ??
javascript
риа
источник
источник
Ответы:
Это потому, что val нет
null
, но содержится'null'
в виде строки.Попробуйте проверить с помощью 'null'
Для объяснения того, когда и почему это работает, см. Подробности ниже .
источник
это поможет вам
источник
if(val)
, который гораздо понятнее читать. Я бы придерживался этого (fyi Ujwal, !! val технически также должен работать на C или C ++) см. Здесь для значений «правдивости» javascript: janosch.woschitz.org/javascript-equality-comparisonval = 0
так!!0
соответствует значению ЛОЖЬ0
,false
,null
,undefined
или некоторые такие значения , которые ПОСТАНОВЛЯЮТtrue
с одним!, Вы собираетесь получитьfalse
за !!. Его следует использовать с осторожностью, если вообще.Есть 3 способа проверить "не нуль". Я рекомендую использовать Strict Not Version.
1. Строгая не версия
Версия Strict Not использует "алгоритм сравнения строгого равенства" http://www.ecma-international.org/ecma-262/5.1/#sec-11.9.6 . Он
!==
имеет более высокую производительность, чем!=
оператор, поскольку алгоритм сравнения строгого равенства не выполняет приведение типов значений.2. Нестрогий вариант Not Version
В нестрогой версии используется «алгоритм сравнения абстрактного равенства» http://www.ecma-international.org/ecma-262/5.1/#sec-11.9.3 . Производительность оператора
!=
ниже, чем у!==
оператора, поскольку алгоритм сравнения абстрактного равенства приводит значения типов.3. Версия Double Not
Версия 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
не работал . Почему это?val
?console.log(typeof val)
,!!
удалит больше, чем простоnull
. Он также преобразуетNaN
иundefined
в ложь. Вот почему ваш массив правильно фильтрует при использовании двойного оператора not!!
.Использование
!==
as!=
приведет вас в мир странностей с нетранзитивной таблицей истинности JavaScript.источник
undefined
илиnull
. В этом случаеval != null
будет возвращатьсяtrue
кundefined
или ,null
но не для других значений falsey как0
.Вы должны использовать
not equals
оператор строгого сравнения,!==
чтобы при вводе пользователем"null"
вы не попали вelse
.источник
Возможно, потому, что значение
val
фактически является строкой,"null"
а не значениемnull
.источник
Это должно работать нормально ..
источник
Если вы хотите включить 0 как допустимое значение:
источник
Это будет работать:
источник
Проверьте https://softwareengineering.stackexchange.com/a/253723
будет оцениваться как истина, если значение не равно:
источник