Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/391.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将未定义的变量传递给函数时出错?_Javascript - Fatal编程技术网

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

Javascript 将未定义的变量传递给函数时出错?,javascript,Javascript,我试图创建一个可重用的函数来检查变量是否未定义。奇怪的是,当我将变量传递给函数以执行代码时,它不起作用,但是如果我在函数外部使用相同的逻辑,它就起作用了。有没有办法让这个函数定义为工作 //THIS WORKS AND RETURN FALSE alert(typeof sdfsdfsdfsdf !== 'undefined'); //THIS GIVES AN ERROR, WHY? //Uncaught ReferenceError: sdfsd is not defined funct

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

//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);

​此处的实时示例(检查控制台是否有错误):

您不能使用未声明的变量,除非它处于
类型的测试中

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

你需要检查

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


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

您不能这样做。如果它不存在,如何将它放入函数中进行测试?还有:
typeof value!='未定义的'&&value!==空值
是非常不必要的。如果您想要一个
null
undefined
测试,只需执行
value==null
。事实上,你的最后一段让我想到要更优雅地重新设计事物。我的场景是通过MVC视图呈现变量。但是视图有一个条件,如果请求没有结果,就不呈现它。因此,我的初始化Javascript(从另一个视图)检查该对象是否存在,以执行操作。所以你是对的,我应该在MVC条件之外声明变量。谢谢你的建议!另一种可以使用未声明的变量的情况是delete,因为可以为未声明的变量赋值,所以我很惊讶这不起作用。必须重新编写一些代码,其方法与问题中的方法几乎相同。@DCShannon在严格模式下,不能为未声明的变量赋值,JavaScript改变了主意,您应该在所有代码中使用
use strict
,这样您就不能设置未声明的variable@JuanMendes如果我从头开始一个新项目,我可能会这样做,但我有遗留代码要处理。