检查函数内的空值会返回错误的结果

时间:2016-06-17 14:56:46

标签: javascript if-statement null

我不确定这里发生了什么。当我在函数中检查变量是否为空时我得到(变量不为空)这是不正确但如果我删除函数部分并直接测试它返回(变量为空)这是正确的。发生了什么?为什么javascript如此令人困惑?

var variable = null;

function scoppedVariables(variable) {
  if( variable === null ) {
  console.log('variable is null');
} else {
  console.log('variable is not null');
}

}

scoppedVariables();

3 个答案:

答案 0 :(得分:3)

由于您接受variable作为参数,它将接管您在函数外定义的variable。因为你没有在函数调用上传递它,所以在函数中它比undefinednull。 (你可以使用非严格的比较,但在这种情况下,你不会想到实际发生了什么;)

答案 1 :(得分:2)

null == undefined // true
null === undefined // false

调用该方法时不带参数,因此variable未定义,严格等于null

使用参数调用函数或将其从签名中删除:

function scoppedVariables(){..}

当以这种方式调用它时,它将访问全局参数,它可以更好地将你想要的变量传递给函数。

答案 2 :(得分:0)

修改你的功能而不是......

if (typeof variable == 'undefined') {
    console.log('variable is undefined');
} else {
    console.log('variable is defined');
    if (variable == null) {
        console.log('variable is null);
    } else {
        console.log('variable is not null');
    }
}

你没有在函数调用中传递任何内容,因此variable将是未定义的,而不是null。您可能希望对参数输入更具防御性,正如我在此处所说明的那样。