Как проверить значения null в JavaScript?
Как я могу проверить значения null в JavaScript? Я написал код ниже, но он не работал.
if (pass == null || cpass == null || email == null || cemail == null || user == null) {
alert("fill all columns");
return false;
}
и как я могу найти ошибки в моих программах на JavaScript?
14 ответов
Javascript очень гибкий в отношении проверки значений "null". Я предполагаю, что вы на самом деле ищете пустые строки, и в этом случае этот более простой код будет работать:
if(!pass || !cpass || !email || !cemail || !user){
который будет проверять пустые строки (""
),null
, undefined
, false
и номера 0
и NaN
обратите внимание, что если вы специально проверяете номера, это распространенная ошибка пропустить 0
С помощью этого метода, и num !== 0
предпочтительнее (или num !== -1
или ~num
(хакерский код, который также проверяет на -1
)) для функций, возвращающих -1
, например,indexOf
)
проверить на null конкретно вы можете использовать это:
if(variable === null && typeof variable === "object")
...или проще:
if(variable === null)
этот тест только pass for null
и не пройдет для ""
, undefined
, false
, 0
или NaN
.
остальная часть этого в ответ на комментарий inorganik, Да, вы можете проверить каждый отдельно.
вам нужно реализовать использование absolutely equals: ===
и typeof
чтобы быть абсолютно конечно, с вашими чеками.
я создал JSFiddle здесь, чтобы показать все индивидуальные тесты работают
вот все результаты тестов:
Null Test:
if(variable === null && typeof variable === "object")
- variable = ""; (false) typeof variable = string
- variable = null; (true) typeof variable = object
- variable = undefined; (false) typeof variable = undefined
- variable = false; (false) typeof variable = boolean
- variable = 0; (false) typeof variable = number
- variable = NaN; (false) typeof variable = number
Empty String Test:
if(variable === "" && typeof variable === "string")
- variable = ""; (true) typeof variable = string
- variable = null; (false) typeof variable = object
- variable = undefined; (false) typeof variable = undefined
- variable = false; (false) typeof variable = boolean
- variable = 0; (false) typeof variable = number
- variable = NaN; (false) typeof variable = number
Undefined Test:
if(variable === undefined && typeof variable === "undefined")
- variable = ""; (false) typeof variable = string
- variable = null; (false) typeof variable = object
- variable = undefined; (true) typeof variable = undefined
- variable = false; (false) typeof variable = boolean
- variable = 0; (false) typeof variable = number
- variable = NaN; (false) typeof variable = number
False Test:
if(variable === false && typeof variable === "boolean")
- variable = ""; (false) typeof variable = string
- variable = null; (false) typeof variable = object
- variable = undefined; (false) typeof variable = undefined
- variable = false; (true) typeof variable = boolean
- variable = 0; (false) typeof variable = number
- variable = NaN; (false) typeof variable = number
Zero Test:
if(variable === 0 && typeof variable === "number")
- variable = ""; (false) typeof variable = string
- variable = null; (false) typeof variable = object
- variable = undefined; (false) typeof variable = undefined
- variable = false; (false) typeof variable = boolean
- variable = 0; (true) typeof variable = number
- variable = NaN; (false) typeof variable = number
NaN Test:
if(!parseFloat(variable) && variable != 0 && typeof variable === "number")
- variable = ""; (false) typeof variable = string
- variable = null; (false) typeof variable = object
- variable = undefined; (false) typeof variable = undefined
- variable = false; (false) typeof variable = boolean
- variable = 0; (false) typeof variable = number
- variable = NaN; (true) typeof variable = number
как вы можете видеть, это немного сложнее, чтобы проверить против NaN
;
просто заменить ==
с ===
во всех местах.
==
является свободным или абстрактным сравнением равенства
===
является строгим сравнением равенства
см. статью MDN на сравнения равенства и одинаковости подробнее.
строгий оператор равенства: -
мы можем проверить значение null,===
if ( value === null ){
}
просто с помощью if
if( value ) {
}
получит значение true, если значение не:
- null
- неопределено
- Нэн
- пустая строка ("")
- false
- 0
во-первых, у вас есть оператор return без тела функции. Скорее всего, это приведет к ошибке.
более чистым способом сделать вашу проверку было бы просто использовать ! оператор:
if (!pass || !cpass || !email || !cemail || !user) {
alert("fill all columns");
}
улучшение по сравнению с принятым ответом, явно проверяя null
но с упрощенным синтаксисом:
if ([pass, cpass, email, cemail, user].every(x=>x!==null)) {
// your code here ...
}
// Test
let pass=1, cpass=1, email=1, cemail=1, user=1; // just to test
if ([pass, cpass, email, cemail, user].every(x=>x!==null)) {
// your code here ...
console.log ("Yayy! None of them are null");
} else {
console.log ("Oops! At-lease one of them is null");
}
вы можете использовать try catch наконец
try {
document.getElementById("mydiv").innerHTML = 'Success' //assuming "mydiv" is undefined
} catch (e) {
if (e.name.toString() == "TypeError") //evals to true in this case
//do something
} finally {}
вы можете throw
собственные ошибки. См.этой.
чтобы проверить undefined и null в javascript вам нужно просто написать следующее:
if (!var) {
console.log("var IS null or undefined");
} else {
console.log("var is NOT null or undefined");
}
Это комментарий к решению WebWanderer относительно проверки NaN (у меня еще недостаточно репутации, чтобы оставить официальный комментарий). Решение читается как
if(!parseInt(variable) && variable != 0 && typeof variable === "number")
но это не удастся для рациональных чисел, которые округлялись бы до 0
, например variable = 0.1
. Лучшим испытанием было бы:
if(isNaN(variable) && typeof variable === "number")
в JavaScript ни одна строка не равна null
.
может быть, вы ожидали pass == null
чтобы быть правдой, когда pass
является пустой строкой, потому что вы знаете, что оператор свободного равенства ==
выполняет определенные виды принуждения типа.
например, это выражение истинно:
'' == 0
напротив, оператор строгого равенства ===
говорит, что это ложь:
'' === 0
учитывая, что ''
и 0
приближенно равна, вы можете обоснованно предположить, что ''
и null
приближенно равны. Однако это не так.
это выражение ложно:
'' == null
результат сравнения любой строки с null
ложно. Следовательно,pass == null
и все ваши другие тесты всегда ложны, и пользователь никогда не получает предупреждение.
чтобы исправить код, сравните каждое значение с пустой строкой:
pass === ''
если вы уверены, что pass
в строке pass == ''
будет также работает, потому что только пустая строка свободно равна пустой строке. С другой стороны, некоторые эксперты говорят, что рекомендуется всегда использовать строгое равенство в JavaScript, если вы специально не хотите выполнять принуждение типа, которое выполняет оператор свободного равенства.
если вы хотите знать, какие пары значений слабо равны, см. таблицу "сравнения одинаковости" в статья Mozilla по этой теме.
подчеркивание: _.функция isnull
_.isNull(null);
=> true
_.isNull(undefined);
=> false
jQuery:С помощью jQuery.тип
jQuery.type( null ) === "null"
Это не будет работать в случае логических значений, поступающих из БД например:
value = false
if(!value) {
// it will change all false values to not available
return "not available"
}
пожалуйста, внимательно просмотрите перед downvote.
насколько мне известно в в JavaScript когда переменная объявил но не имеет присвоенного значения, его тип undefined
. так что мы можем проверить переменную, даже если это будет object
держал экземпляр на месте стоимостью.
создайте вспомогательный метод для проверки nullity, который возвращает true
и используйте его в своем API.
вспомогательная функция для проверки переменной пусто:
function isEmpty(item){
if(item){
return false;
}else{
return true;
}
}
try-catch исключительный вызов API:
try {
var pass, cpass, email, cemail, user; // only declared but contains nothing.
// parametrs checking
if(isEmpty(pass) || isEmpty(cpass) || isEmpty(email) || isEmpty(cemail) || isEmpty(user)){
console.log("One or More of these parameter contains no vlaue. [pass] and-or [cpass] and-or [email] and-or [cemail] and-or [user]");
}else{
// do stuff
}
} catch (e) {
if (e instanceof ReferenceError) {
console.log(e.message); // debugging purpose
return true;
} else {
console.log(e.message); // debugging purpose
return true;
}
}
в некоторых случаях тест:
var item = ""; // isEmpty? true
var item = " "; // isEmpty? false
var item; // isEmpty? true
var item = 0; // isEmpty? true
var item = 1; // isEmpty? false
var item = "AAAAA"; // isEmpty? false
var item = NaN; // isEmpty? true
var item = null; // isEmpty? true
var item = undefined; // isEmpty? true
console.log("isEmpty? "+isEmpty(item));