我不确定这里发生了什么。当我在函数中检查变量是否为空时我得到(变量不为空)这是不正确但如果我删除函数部分并直接测试它返回(变量为空)这是正确的。发生了什么?为什么javascript如此令人困惑?
var variable = null;
function scoppedVariables(variable) {
if( variable === null ) {
console.log('variable is null');
} else {
console.log('variable is not null');
}
}
scoppedVariables();
答案 0 :(得分:3)
由于您接受variable
作为参数,它将接管您在函数外定义的variable
。因为你没有在函数调用上传递它,所以在函数中它比undefined
更null
。 (你可以使用非严格的比较,但在这种情况下,你不会想到实际发生了什么;)
答案 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。您可能希望对参数输入更具防御性,正如我在此处所说明的那样。