Чи є якась перевірка, чи не є значення в Nuvascript чи не порожнім рядком? Я використовую наступний:
var data; //get its value from db
if(data != null && data != '') {
// do something
}
Але мені цікаво, чи є інше краще рішення. Дякую.
Чи є якась перевірка, чи не є значення в Nuvascript чи не порожнім рядком? Я використовую наступний:
var data; //get its value from db
if(data != null && data != '') {
// do something
}
Але мені цікаво, чи є інше краще рішення. Дякую.
undefinedце один із особливих випадків, який, згідно з вашою логікою, повинен викликати, // do somethingале не буде.
Відповіді:
Якщо ви справді хочете підтвердити, що змінна не є нульовою і не є порожнім рядком, ви повинні написати:
if(data !== null && data !== '') {
// do something
}
Зверніть увагу, що я змінив ваш код для перевірки на рівність типу ( !==| ===).
Якщо, однак ви просто хочете переконатися, що код буде працювати лише для "розумних" значень, тоді ви можете, як вже говорили інші, написати:
if (data) {
// do something
}
Оскільки в javascript як нульові значення, так і порожні рядки дорівнює false (тобто null == false).
Різниця між цими двома частинами коду полягає в тому, що для першої кожне значення, яке не є спеціально нульовим або порожнім рядком, буде входити в if. Але, на другому, кожен істинний іш значення введіть if: false, 0, null, undefinedі порожні рядки, не буде.
І те, nullі порожній рядок є хибними значеннями в JS. Отже,
if (data) { ... }
цілком достатньо.
Примітка збоку, хоча: я б уникав наявності змінної в моєму коді, яка може проявлятися в різних типах. Якщо дані в кінцевому підсумку будуть рядком, тоді я спочатку визначив би свою змінну порожнім рядком, тож ви можете зробити це:
if (data !== '') { ... }
без нуля (або будь-якої дивної речі, подібної data = "0") не заважає.
Замість використання
if(data !== null && data !== '' && data!==undefined) {
// do something
}
Ви можете використовувати нижче простий код
if(Boolean(value)){
// do something
}
if (data?.trim().length > 0) {
//use data
}
?. по бажанню оператор ланцюжка буде коротке замикання і повернення , undefinedякщо дані nullish( nullабо undefined) , які будуть оцінювати до помилкового в ifвираженні.
спробуйте ----------
function myFun(){
var inputVal=document.getElementById("inputId").value;
if(inputVal){
document.getElementById("result").innerHTML="<span style='color:green'>The value is "+inputVal+'</span>';
}
else{
document.getElementById("result").innerHTML="<span style='color:red'>Something error happen! the input May be empty.</span>";
}
}
<input type="text" id="inputId">
<input type="button" onclick="myFun()" value="View Result">
<h1 id="result"></h1>
Коли ми кодуємо порожнім, по суті, це може означати будь-яку з наступних ситуацій, враховуючи обставини;
У реальній життєвій ситуації, як зазначив ОП, ми можемо побажати протестувати їх усіх, або часом ми можемо побажати лише тестувати обмежений набір умов.
Як правило, if(!a){return true;}більшу частину часу виконує своє призначення, однак він не охоплює ширший набір умов.
Ще один хак, який зробив свій виток, - це return (!value || value == undefined || value == "" || value.length == 0);
Але що, якщо нам потрібен контроль над усім процесом?
У нативному ядрі JavaScript немає простого рішення, що його потрібно прийняти. Враховуючи те, що ми відмовляємось від підтримки застарілого IE11 (чесно кажучи, навіть у Windows це має бути), нижченаведене рішення, що з’явилося через розлад, працює у всіх сучасних браузерах;
function empty (a,b=[])
{if(!Array.isArray(b)) return;
var conditions=[null,'0','0.0',false,undefined,''].filter(x => !b.includes(x));
if(conditions.includes(a)|| (typeof a === 'string' && conditions.includes(a.toString().trim())))
{return true;};
return false;};`
Логіка рішення - це функція має два параметри a і b , a - це значення, яке нам потрібно перевірити, b - масив із заданими умовами, які нам потрібно виключити із попередньо визначених умов, перерахованих вище. Значенням за замовчуванням b встановлено порожній масив [].
Перший запуск функції полягає в тому, щоб перевірити, є b масивом чи ні, якщо ні, то достроково вийти з функції.
наступним кроком є обчислення різниці масивів з [null,'0','0.0',false,undefined,'']і з масиву b. якщо b - порожній масив, будуть визначені заздалегідь визначені умови, інакше він видалить відповідні значення.
условия = [заздалегідь визначений набір] - [для виключення набір] функція фільтра виконує саме те, що використовує його. Тепер, коли у нас є умови в наборі масивів, все, що нам потрібно зробити, це перевірити, чи є значення в масиві умов. включає функцію робить саме те, що немає необхідності писати неприємні цикли вашого власного нехай двигуна JS робити важкий підйом.
Зрозуміло, якщо ми хочемо перетворити a у рядок для порівняння, тоді 0 та 0.0 будуть працювати нормально, однак Null та Undefined би через помилку блокуючи весь сценарій. Нам потрібне рішення крайнього випадку. Знизу простий || охоплює крайній випадок, якщо перша умова не виконується. Запуск чергової ранньої перевірки включення робить достроковий вихід, якщо не виконано.
if(conditions.includes(a)|| (['string', 'number'].includes(typeof a) && conditions.includes(a.toString().trim())))
Функція trim () охоплює лише великі пробіли та значення вкладок, і це буде діяти лише у краєвому випадку.
Ігрова площадка
function empty (a,b=[]){
if(!Array.isArray(b)) return;
conditions=[null,'0','0.0',false,undefined,''].filter(x => !b.includes(x));
if(conditions.includes(a)||
(['string', 'number'].includes(typeof a) && conditions.includes(a.toString().trim()))){
return true;
}
return false;
}
console.log('1 '+empty());
console.log('2 '+empty(''));
console.log('3 '+empty(' '));
console.log('4 '+empty(0));
console.log('5 '+empty('0'));
console.log('6 '+empty(0.0));
console.log('7 '+empty('0.0'));
console.log('8 '+empty(false));
console.log('9 '+empty(null));
console.log('10 '+empty(null,[null]));
console.log('11 dont check 0 as number '+empty(0,['0']));
console.log('12 dont check 0 as string '+empty('0',['0']));
console.log('13 as number for false as value'+empty(false,[false]));
Давайте зробимо це складним - а що, якщо наше значення для порівняння - це масив його сам і може бути настільки глибоко вкладеним, наскільки це може бути. що, якщо ми хочемо перевірити, чи не є значення в масиві порожнім, це може бути крайній бізнес-випадок.
function empty (a,b=[]){
if(!Array.isArray(b)) return;
conditions=[null,'0','0.0',false,undefined,''].filter(x => !b.includes(x));
if(Array.isArray(a) && a.length > 0){
for (i = 0; i < a.length; i++) { if (empty(a[i],b))return true;}
}
if(conditions.includes(a)||
(['string', 'number'].includes(typeof a) && conditions.includes(a.toString().trim()))){
return true;
}
return false;
}
console.log('checking for all values '+empty([1,[0]]));
console.log('excluding for 0 from condition '+empty([1,[0]], ['0']));
це проста і ширша функція використання, яку я застосував у своїй структурі;
Мені настільки набридло перевіряти наявність нульових і порожніх рядків, що я зараз просто просто пишу і викликаю невелику функцію, яка робить це за мене.
/**
* Test if the given value equals null or the empty string.
*
* @param {string} value
**/
const isEmpty = (value) => value === null || value === '';
// Test:
isEmpty(''); // true
isEmpty(null); // true
isEmpty(1); // false
isEmpty(0); // false
isEmpty(undefined); // false
function validateAttrs(arg1, arg2, arg3,arg4){
var args = Object.values(arguments);
return (args.filter(x=> x===null || !x)).length<=0
}
console.log(validateAttrs('1',2, 3, 4));
console.log(validateAttrs('1',2, 3, null));
console.log(validateAttrs('1',undefined, 3, 4));
console.log(validateAttrs('1',2, '', 4));
console.log(validateAttrs('1',2, 3, null));
if(data)цього вистачило б, як тут