Как я могу проверить нулевые значения в JavaScript? Я написал код ниже, но он не сработал.
if (pass == null || cpass == null || email == null || cemail == null || user == null) {
alert("fill all columns");
return false;
}
И как я могу найти ошибки в моих программах JavaScript?
Javascript очень гибок в отношении проверки «нулевых» значений. Я предполагаю, что вы на самом деле ищете пустые строки, и в этом случае этот более простой код будет работать:
if(!pass || !cpass || !email || !cemail || !user){
Который будет проверять наличие пустых строк (""
), null
, undefined
, false
и чисел 0
и NaN
Обратите внимание, что если вы специально проверяете цифры, часто пропускают 0
с помощью этого метода и num !== 0
является предпочтительным (или num !== -1
или ~ num
(хаккий код, который также проверяет -1
)) для функций, которые возвращают -1
, например,. indexOf
)
Чтобы проверить на ноль ОСОБЕННО вы бы использовали это:
if (variable === null)
Этот тест ONLY пройдет для null
и не будет проходить для " "
," неопределенный "," false "," 0 "или" NaN ".
Кроме того, я предоставил абсолютные проверки для каждого «ложноподобного» значения (которое возвращает true для !переменная
).
Обратите внимание, что для некоторых абсолютных проверок вам необходимо реализовать использование абсолютно равно: ===
и typeof
.
[Я создал здесь JSFiddle , чтобы показать все работающие отдельные тесты](
)Вот выходные данные каждой проверки:
Null Test:
if (variable === null)
- 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 === '')
- 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 (typeof variable == "undefined")
-- or --
if (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)
- 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)
- 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 (typeof variable == 'number' && !parseFloat(variable) && variable !== 0)
- 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 ) {
}
оценит до истины, если значение не :
Улучшение принятого ответа путем явной проверки на null
, но с упрощенным синтаксисом:
if ([pass, cpass, email, cemail, user].every(x=>x!==null)) {
// your code here ...
}
& Лт;!- начать фрагмент: js hide: ложная консоль: истинная павиана: false - >
// 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");
}
& Лт;!- конец фрагмента - >
Во-первых, у вас есть оператор возврата без тела функции. Скорее всего, это приведет к ошибке.
Более чистый способ сделать ваш чек - просто использовать ! оператор:
if (!pass || !cpass || !email || !cemail || !user) {
alert("fill all columns");
}
чтобы проверить неопределенный и ноль в javascript, вам нужно просто написать следующее:
if (!var) {
console.log("var IS null or undefined");
} else {
console.log("var is NOT null or undefined");
}
В JavaScript ни одна строка не равна null
.
Возможно, вы ожидали, что pass == null
будет истинным, когда pass
- пустая строка, потому что вы знаете, что оператор свободного равенства ==
выполняет определенные виды принудительного принуждения типа.
Например, это выражение верно:
'' == 0
Напротив, оператор строгого равенства ===
говорит, что это неверно:
'' === 0
Учитывая, что ' 'и
0слабо равны, вы можете разумно предположить, что
' '' и null
свободно равны. Однако это не так.
Это выражение неверно:
'' == null
Результат сравнения любой строки с null
является ложным. Поэтому pass == null
и все остальные ваши тесты всегда ложны, и пользователь никогда не получает предупреждение.
Чтобы исправить ваш код, сравните каждое значение с пустой строкой:
pass === ''
Если вы уверены, что pass
- это строка, `pass == '' '' также будет работать, потому что только пустая строка слабо равна пустой строке. С другой стороны, некоторые эксперты говорят, что рекомендуется всегда использовать строгое равенство в JavaScript, если вы специально не хотите выполнять типовое принуждение, которое выполняет оператор свободного равенства.
Если вы хотите узнать, какие пары значений слабо равны, см. Таблицу «Сравнения вежливости» в [статьи Мозиллы по этой теме](https://developer.mozilla.org/en-US/docs/Web/JavaScript / Equality_comparisons_and_sameness).
Вы можете использовать попробовать поймать наконец
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 {}
Вы также можете «бросить» свои ошибки. Смотрите это.
Это комментарий к решению WebWanderer относительно проверки NaN (у меня пока недостаточно представителей, чтобы оставить официальный комментарий). Решение читается как
if(!parseInt(variable) && variable != 0 && typeof variable === "number")
но это не удастся для рациональных чисел, которые будут округляться до 0
, таких как variable = 0.1
. Лучшим тестом будет:
if(isNaN(variable) && typeof variable === "number")
На самом деле я думаю, что вам, возможно, придется использовать
if (значение !== ноль || значение !== неопределенный)
потому что если вы используете if (значение)
, вы также можете фильтровать 0 или ложные значения.
Рассмотрим эти две функции:
const firstTest = value => {
if (value) {
console.log('passed');
} else {
console.log('failed');
}
}
const secondTest = value => {
if (value !== null && value !== undefined) {
console.log('passed');
} else {
console.log('failed');
}
}
firstTest(0); // result: failed
secondTest(0); // result: passed
firstTest(false); // result: failed
secondTest(false); // result: passed
firstTest(''); // result: failed
secondTest(''); // result: passed
firstTest(null); // result: failed
secondTest(null); // result: failed
firstTest(undefined); // result: failed
secondTest(undefined); // result: failed
В моей ситуации мне просто нужно было проверить, является ли значение нулевым и неопределенным, и я не хотел фильтровать значения 0
или false
или '
. поэтому я использовал второй тест, но вам также может понадобиться отфильтровать их, что может привести к использованию первого теста.
Вы можете использовать модуль lodash, чтобы проверить значение является нулевым или неопределенным
_.isNil(value)
Example
country= "Abc"
_.isNil(country)
//false
state= null
_.isNil(state)
//true
city= undefined
_.isNil(state)
//true
pin= true
_.isNil(pin)
// false
Ссылка: https://lodash.com/docs/#isNil
Я нашел другой способ проверить, является ли значение нулевым:
if(variable >= 0 && typeof variable === "object")
null
действует как number
и object
одновременно. Сравнение null > = 0
или null < = 0
приводит к true
. Сравнение null === 0
или null > 0
или null < 0
приведет к ложному. Но поскольку null
также является объектом, мы можем обнаружить его как null.
Я сделал более сложную функцию natureof ведьма будет лучше, чем тип, и мне может быть сказано, какие типы включать или сохранять группировку
& Лт;!- начать фрагмент: js hide: ложная консоль: истинная павиана: false - >
& Лт;!- язык: lang-js - > / * функция natureof (переменная, [включенные типы]) включенные типы есть null - null приведет к «неопределенному» или, если он будет включен, приведет к «null» NaN - NaN приведет к «неопределенному» или, если он будет включен, приведет к «NaN» -infinity - отделит негатив-Inifity от «Infinity» число - разделит число на «int» или «double» массив - отделит «массив» от «объекта» пустая - пустая «строка» приведет к «пустой» или empty = undefined - пустая «строка» приведет к «неопределению»
// ДЕМО пусть types = [null, "", "string", undefined, NaN, Infinity, -Infinity, false, "false", true, "true", 0, 1, -1, "test", {var: 1}, [1,2], {0: 1, 2, длина: 2}]
for (i in types) { consol.log («natureof», types [i], «=», nature (types [i], «null», «NaN», «-infinity», «number», «array», «empty = undefined») )) } & Лт;!- конец фрагмента - >
Я сделал эту очень простую функцию, которая творит чудеса:
function safeOrZero(route) {
try {
Function(`return (${route})`)();
} catch (error) {
return 0;
}
return Function(`return (${route})`)();
}
Маршрут - это любая цепочка ценностей, которая может взорваться. Я использую его для jQuery / cheerio и объектов и тому подобного.
Примеры 1: простой объект, такой как этот const testObj = {items: [{val: 'haya'}, {val: null}, {val: 'hum!'}];};
.
Но это может быть очень большой объект, который мы даже не сделали. Так что я передаю это через:
let value1 = testobj.items[2].val; // "hum!"
let value2 = testobj.items[3].val; // Uncaught TypeError: Cannot read property 'val' of undefined
let svalue1 = safeOrZero(`testobj.items[2].val`) // "hum!"
let svalue2 = safeOrZero(`testobj.items[3].val`) // 0
Конечно, если вы предпочитаете, вы можете использовать null
или ' No value '
... Все, что соответствует вашим потребностям.
Обычно запрос DOM или селектор jQuery могут выдавать ошибку, если она не найдена. Но используя что-то вроде:
const bookLink = safeOrZero($('span.guidebook > a')[0].href);
if(bookLink){
[...]
}
AFAIK в JAVASCRIPT , когда переменная объявлена , но не имеет заданного значения, ее тип не определен
. поэтому мы можем проверить переменную, даже если это будет «объект», имеющий некоторую инстанцию вместо значения .
создать вспомогательный метод для проверки nullity, который возвращает true
и использовать его в вашем API
функция helper для проверки, является ли переменная пустой:
function isEmpty(item){
if(item){
return false;
}else{
return true;
}
}
попробуйте поймать исключительный вызов 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));
Попробуй это:
if (!variable && typeof variable === "object") {
// variable is null
}