此if语句有什么问题?如果我传递的不是空值,我仍然不会进入if块
val1
和val2
都具有值:
let val1 = 'category'
let val2 = 'medical'
if ((val1 !== null || val1 !== '') && (val2 !== null || val2 !== '')) {
console.log(val1, val2);
}
val1
为空,并且val2
具有一个值:
let val1 = ''
let val2 = 'medical'
if ((val1 !== null || val1 !== '') && (val2 !== null || val2 !== '')) {
console.log(val1, val2);
}
答案 0 :(得分:2)
条件val1 !== null || val1 !== ''
或val2 !== null && val2 !== ''
将始终为true
它的意思是val1
不等于null
或为空字符串。考虑一下它的null
的另一部分是否将自动true
,反之亦然。
您应该使用&&
而不是||
var val1 = 'a'
var val2 = ''
if((val1 !== null && val1 !== '') && (val2 !== null && val2 !== '')){
console.log(val1, val2);
}
可以使用every()
和includes()
var val1 = 'a'
var val2 = ''
if([val1, val2].every(x => ![null,''].includes(x))){
console.log(val1, val2);
}
答案 1 :(得分:2)
您要使用&&
而不是||
,因为您当前正在说的是:
Val
不能为null
,也不能为empty
。
只要其中一个取值为true
,它将输入if statement
。由于empty string
不等于null
,因此null
的支票是true
,这意味着其中有一张评估为true
的支票会输入{{1} }。如果反之亦然,则if statement
的评估结果为empty string
,然后再次输入true
。
如果您要检查是否相等,这将更有意义,然后显示如下:
if statement
可以是Val
,也可以是null
。
但是,这不是您想要的,所以您想说的是:
empty
不能为Val
,并且不能为null
。
empty
检查。&&
检查。
||
答案 2 :(得分:1)
您需要更改||。到&&在if语句中。
let val1 = 'category'
let val2 = 'medical'
if ((val1 !== null && val1 !== '') && (val2 !== null && val2 !== '')) {
console.log(val1, val2);
}
let val1 = ''
let val2 = 'medical'
if ((val1 !== null && val1 !== '') && (val2 !== null && val2 !== '')) {
console.log(val1, val2);
}
这应该可以解决您的问题。
答案 3 :(得分:1)
正如其他答案所提到的,需要将这种表达式(val1 !== null || val1 !== '')
更改为(val1 !== null && val1 !== '')
,否则对于true
或{{1},条件将是val1 = null
},例如:
val1 = ''
,然后将val1 = null
评估为(val1 !== null || val1 !== '')
,这将导致(null !== null || null !== '')
等于(false || true)
。现在,对于您的特殊情况,您可以创建一个方法,当您认为变量为true
时返回true
(也可以检查"defined"
),并执行类似的操作:
undefined
function _isDefined(val)
{
return ![null, undefined, ""].includes(val);
}
let tests = [
["category", "medical"],
["category", null],
[undefined, "medical"],
["", null],
["something", ""]
];
tests.forEach(function(test)
{
let [val1, val2] = test;
if (_isDefined(val1) && _isDefined(val2))
console.log(val1, val2);
});
答案 4 :(得分:0)
只需说if
。例如:
var x = "";
var y = null;
var z;
var argArray = [x,y,z];
function hasValue(arg){
if(arg){
console.log("arg has some value");
} else {
console.log("arg has no value and is " + arg);
}
}
for (var i = 0; i < argArray.length; i++) {
hasValue(argArray[i]);
}