JS. Проверка переменной на undefined или false
Вот пример посложнее, надо проверить переменную на лож или истину. Значит:
if(typeof undefinedVar == "undefined" && !undefinedVar) alert("Undefined and false"); else alert(undefinedVar?"Not undefined True":"Not undefined False");
А теперь, что недавно обнаружил я, причём искал в интернете и не нашел ни в одной книге.
if(!!undefinedVar) alert("Not undefined"); else alert("Undefined");
То-есть, «!!» — является проверкой как определена ли переменная и является истиной, а «. » — как определена переменная и является ложью.
При этом если переменная является Undefined, то всегда вернется false.
Счастливых Вам экспериментов!
var iDefined=true; var iDefinedMeToo=false; if(!!iDefined) alert("iDefined true"); else alert("iDefined false"); if(!!iDefinedMeToo) alert("iDefinedMeToo true"); else alert("iDefinedMeToo false"); if(!!iNotDefined) alert("iNotDefined true"); else alert("iNotDefined false or iNotDefined is undefined");
Проверка значений переменных на null или NaN и их замена на 0
Если несколько или одна переменная равна null или NaN, как сделать так, что ее значение перезаписалось на 0?
if (type_work_amount || type_work_amount2 || type_work_amount3 == null || NaN) < // код >
Отслеживать
10.3k 8 8 золотых знаков 15 15 серебряных знаков 30 30 бронзовых знаков
задан 28 окт 2022 в 10:04
73 1 1 серебряный знак 9 9 бронзовых знаков
Лучше сохраните данные в массив, вместо создания множества переменных 🙂
28 окт 2022 в 10:22
@ΝNL993 покажите пример как сделать массивом?
28 окт 2022 в 10:27
Я из вашего кода вообще не понимаю что происходит
28 окт 2022 в 11:19
$type_work_amount = 22; $type_work_amount2 = null; $type_work_amount3 = 99; if ($type_work_amount === null) < $type_work_amount = 0; >else if ($type_work_amount2 === null) < $type_work_amount2 = 0; >else if ($type_work_amount3 === null) < $type_work_amount3 = 0; >let sum = $type_work_amount + $type_work_amount2 + $type_work_amount3; console.log(sum);
28 окт 2022 в 12:13
[123, null, NaN].map(. ) — а внутри функция которая берёт первый аргумент — элемент массива, а в функции уже делаете проверку, если текущее значение невалидное (null или NaN), тогда возвращаете 0, в противоположном случае, возвращаете то же значение.
28 окт 2022 в 13:16
2 ответа 2
Сортировка: Сброс на вариант по умолчанию
Для проверки значений на null, undefined, NaN в большенстве случаев достаточно преобразовать значение к типу boolean, как это делается в операторе if . Для явного преобразования можно воспользоваться функцией Boolean(value) или воспользоваться оператором !!(Двойное НЕ) !!value
Стоит заметить, что 0 и пустая строка вернут false.
Если необходимо, что бы 0 и пустая строка были не false, необходимо дополнительно реализовывать проверки.
Числа
Для чисел (typeof value === ‘number’) можно явно сравнить value === 0 , однако стоит помнить, что typeof NaN === ‘number’.
Проверить число, что оно является NaN можно при помощи встроенного метода чисел Number.isNaN(value) (Сокращенно isNaN(value) ) — вернет true, если value это NaN Для проверки числа на Infinity (бесконечность — возникает при делении на 0) есть встроенный метод Number.isFinite(value) (Сокращенно isFinite(value) ) — вернет true если число конечно.
Строки
Для строки выполнить проверку value === » или просто проверить на тип typeof value === ‘string’
Так же стоит помнить, что массив и объект всегда будут возвращать true, даже если они пустые.
Массивы
Для проверки массива достаточно проверить его длину. Если 0, то массив пустой
value.length === 0 или if (!value.length) < массив заполнен >else < массив пуст >
Для проверки, что переменная является массивом, можно обратиться к встроенному методу массивов Array.isArray(value) — вернет true, если это массив.
Объекты
Для выполнения проверки, что объект пустой, можно воспользоваться встроенным методом объектов Object.keys(values) , который возвращает массив ключей. Если длина полученного массива 0, значит объект пуст.
Так как тип данных у массивов и объектов одинаковый и typeof вернет ‘object’, то для того что бы отличить массив от объекта, необходимо проверить, является ли он массивом через встроенный метод массива Array.isArray(value)
Относительно вашего примера, я бы пошел простым путем и создал бы функцию, которая будет возвращать 0 если значение null или NaN или само значение переменной, если это не так:
let type_work_amount = 123; let type_work_amount2 = null; let type_work_amount3 = 3 / 'a'; console.log(type_work_amount, type_work_amount2, type_work_amount3); function checkVariable(val) < if (!val) return 0 return val; >console.log(checkVariable(type_work_amount)); console.log(checkVariable(type_work_amount2)); console.log(checkVariable(type_work_amount3)); //Если надо переопределить значение в переменной по условию, то можно присваивать переменной значение, которое возвращается из функции type_work_amount = checkVariable(type_work_amount); type_work_amount2 = checkVariable(type_work_amount2); type_work_amount3 = checkVariable(type_work_amount3); // Если надо что бы сработало одно из условий, то надо записать ваш IF вот так if (!type_work_amount || !type_work_amount2 || !type_work_amount) < // Какой то ваш код >
Как проверить существует ли переменная?
Получаешь тип и сравниваешь его с undefined . Если true , то переменная установлена.
if(typeof dfshkhdkjfh !== "undefined") alert('Defined'); else alert('Not defined');
Отслеживать
ответ дан 27 мая 2015 в 13:54
user31688 user31688
if(typeof par === 'undefined') < alert("par undefined"); >else < alert("par defined"); >var par2 = "something"; if(typeof par2 === 'undefined') < alert("par2 undefined"); >else
Отслеживать
ответ дан 27 мая 2015 в 13:52
user177221 user177221
function isset(r) < return typeof r !== 'undefined'; >// проверка на переменную varname в глобальном контексте console.log(isset(window['varname']); // проверка на переменную V у объекта console.log(isset(App.V));
Удобней использовать функцию, так как часто требуется такова рода проверка.
Или более продвинутый вариант
function isset(obj) < if (typeof obj === 'undefined' || obj === null ) < return false; >else
Ну и для сверх ленивых и знающих что будет в переменной:
if (!!variable) < //exist >
Как проверить на undefined?
Есть код который выводит сумму чисел в массиве, без наибольшего и наименьшего значения. Не могу проверит входное значение на undefined. Пробовал проверять таким способом:
if (typeof something === "undefined")
Но тесты не прохожу, мне нужно если undefined то выводить просто 0.
function getMaxOfArray(numArray) < return Math.max.apply(null, numArray); >function getMinOfArray(numArray) < return Math.min.apply(null, numArray); >function sumArray(numbers)< var maxPlusMin = getMaxOfArray(numbers) + getMinOfArray(numbers); if (numbers && isNaN(numbers) & (numbers.length != 0) ) < return numbers.reduce(function(sum, n)< return n + sum; >, -maxPlusMin ); > else < numbers = 0; >> alert(sumArray([ 1, 2, 3, 4, 10 ]));