10

我正在尝试创建一个可重用的函数来检查变量是否未定义。奇怪的是,当我将变量传递给函数以执行代码时,它不起作用,但如果我在函数外部使用相同的逻辑,它就起作用了。有没有办法让这个函数 isDefined 工作?

//THIS WORKS AND RETURN FALSE
alert(typeof sdfsdfsdfsdf !== 'undefined');

//THIS GIVES AN ERROR, WHY?
//Uncaught ReferenceError: sdfsd is not defined 
function isDefined(value) {
        alert(typeof value !== 'undefined' && value !== null)
}

isDefined(sdfsd);

​现场示例(检查控制台是否有错误):http: //jsfiddle.net/JzJHc/

4

1 回答 1

10

typeof除非在测试中,否则您不能使用尚未声明的变量

当您尝试将尚未声明的变量传递给函数时,会考虑使用该未声明的变量。您会注意到错误在调用者中,而不是在调用者内部isDefined

您需要运行检查

if (typeof sdsdsd !== 'undefined')

在将其传递给函数之前。基本上这意味着你不能编写一个isDefined接受未声明变量的函数。您的函数只能用于未定义的属性(可以传递)

但是,我很好奇,您传递一个不存在的变量的真实情况是什么?您应该声明所有变量,并且它们应该已经存在。如果您声明var sdsdsds它会以 的值存在,undefined并且您的isDefined函数可以正常工作。

于 2012-08-09T00:04:33.883 回答