将未定义的变量传递给函数时出错?

时间:2012-08-08 23:48:12

标签: javascript

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

1 个答案:

答案 0 :(得分:10)

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

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

您需要运行检查

if (typeof sdsdsd !== 'undefined')

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

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