我不确定这里发生了什么。当我检查函数中的变量是否为null时,我会获取(变量不是null),这是不正确的,但是如果我删除功能零件并直接测试其返回(变量为null),则是正确的。发生了什么 ?为什么JavaScript如此混乱?
var variable = null;
function scoppedVariables(variable) {
if( variable === null ) {
console.log('variable is null');
} else {
console.log('variable is not null');
}
}
scoppedVariables();
由于您接受variable
作为参数,因此它接管了您在功能之外定义的variable
。由于您不在函数调用上传递它,因此在函数中,它比undefined
相比是null
。(您可以使用非分数比较,但是在这种情况下,您不会弄清楚实际发生了什么;))
null == undefined // true
null === undefined // false
该方法是没有参数的,因此variable
是未定义的,这不是严格的等于null
。
用参数调用该函数,或从签名中删除它:
function scoppedVariables(){..}
当以这种方式调用时,它将访问全局参数,但是将要变量传递给函数是更好的实践。
修改您的功能以使用此功能...
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
将不确定,而不是无效。您可能希望在参数输入方面更具防御性,如我在此处所示。