将未定义的变量传递给函数时出错?
问题描述:
我想创建一个可重用的函数,检查变量是否未定义。奇怪的是,当我将变量传递给函数来执行代码时,它不起作用,但如果我在函数之外使用相同的逻辑,它就会起作用。有什么办法让这个函数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/
答
当您尝试通过您不能使用尚未声明的变量,除非它是在一个typeof
测试
一个未被声明为函数的变量,被认为使用了未声明的变量。你会发现该错误是在调用者,而不是内部isDefined
你需要给它传递到函数之前运行检查
if (typeof sdsdsd !== 'undefined')
。基本上,这意味着你不能写一个isDefined
函数接受未声明的变量。你的功能只能用于未定义的属性(这是可以传递的)
但是,我很好奇,什么是真实世界的情况下,你传递一个不存在的变量?你应该声明所有的变量,它们应该已经存在。如果您声明var sdsdsds
它将存在与undefined
的值和您的isDefined
函数将工作得很好。
你不能这样做。如果它不存在,如何将它放入函数中进行测试?此外:'typeof value!=='undefined'&& value!== null'是非常不必要的。如果你想要一个'null'或'undefined'测试,只需要'value == null'。它完成了同样的事情。 – 2012-08-09 00:08:31