检查javascript中的空值和空值

时间:2019-05-30 15:45:38

标签: javascript

此if语句有什么问题?如果我传递的不是空值,我仍然不会进入if块

val1val2都具有值:

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);
}

5 个答案:

答案 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]);
}