是否可以检查Java中的值是否不为null且不为空字符串?我正在使用以下之一:
var data; //get its value from db
if(data != null && data != '') {
// do something
}
但是我想知道是否还有另一个更好的解决方案。谢谢。
Answers:
如果您确实要确认变量不是null而不是具体不是空字符串,则应编写:
if(data !== null && data !== '') {
// do something
}
注意,我更改了代码以检查类型相等性(!==| ===)。
但是,如果您只是想确保代码仅针对“合理的”值运行,那么可以像其他人已经指出的那样编写:
if (data) {
// do something
}
因为在JavaScript中,空值和空字符串都等于false(即null == false)。
这两个代码部分的区别在于,对于第一个部分,每个不是专门为null或为空字符串的值都将输入if。但是,在第二个,每一个真正的十岁上下的价值将进入if:false,0,null,undefined和空字符串,不会。
两者null和一个空字符串都是JS中的虚假值。因此,
if (data) { ... }
完全足够。
不过,在旁边有一个注释:我会避免在代码中包含一个可能以不同类型体现的变量。如果数据最终将是一个字符串,那么我最初将使用一个空字符串定义变量,因此您可以执行以下操作:
if (data !== '') { ... }
没有null(或类似的怪异东西data = "0")的妨碍。
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>
在本质上,当我们编码为空时,可能意味着以下任何一种情况;
如OP所述,在现实生活中,我们可能希望对它们全部进行测试,或者有时我们可能仅希望对有限的一组条件进行测试。
通常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为空数组,则预定义条件成立,否则它将删除匹配的值。
条件= [预定义集]-[要排除的集] 过滤器函数正是利用它来做的。现在我们在数组集中有条件,我们要做的就是检查value是否在conditions数组中。 包含函数的作用完全在于,无需编写自己讨厌的循环即可让JS引擎完成繁重的工作。
疑难杂症 ,如果我们要一个转换成字符串进行比较,然后0和0.0将运行良好但null和undefined将通过错误阻止整个脚本。我们需要边缘案例解决方案。下面简单|| 如果不满足第一个条件,则覆盖边缘情况。如果不符合要求,则再次运行包括include的早期检查将使您提前退出。
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)足以作为它说,在这里