繁体   English   中英

在if语句中使用未定义的变量

[英]The use of undefined variables in if-statements

此代码段会导致JavaScript运行时错误:(未定义foo

if (foo) {
    // ...
}

我必须首先定义foo ,如下所示:

var foo = foo || null // or undefined, 0, etc.

......只有这样才能做到:

if (foo) {
    // ...
}

这是为什么?


更新:

这对我来说有点像脑子里的事情:'fcourse你无法访问未分配的变量。

有趣的东西,你可以在未定义的变量上做一个typeof()。 我会接受miccet的回答,因为我认为这是最优雅的解决方案。

我觉得你在问,因为你知道javascript似乎在某些情况下允许未定义的变量(即没有运行时错误)而在其他情况下不允许。

原因如下:javascript 总是在检查未定义的变量时抛出错误,但是在检查未定义的属性时 永远不会抛出错误,只要您只使用一个级别的间接。

例:

// throws runtime error
if(foo) {
    // ...
}

// does not throw runtime error
if(window.foo) {
    // ...
}

// does not throw runtime error
var obj = {};
if(obj.foo) {
    // ...
}

// throws runtime error
if(obj.foo.bar) { // going two levels deep, but foo is undefined
    // ...
}

希望能稍微清理一下。

您必须定义它,才能检查它的值。 在这种情况下,你正在检查天气是否属实。 这个变量显然没有设置为任何东西,例如C#中的null和VB中的Nothing。

如果必须,调试问题或其他什么,你可以检查变量是否未定义如下:

if (typeof(variable) == "undefined")

那是因为你现在用以下方法定义它:

var foo = foo || null

你为什么不首先定义它? 这对我来说似乎很简单(除非我遗漏了什么)。

在变量创建之前使用变量(或设置为某个变量)是一种糟糕的编程习惯,应该避免使用。 我的建议是不要使用这个技巧来确保它被设置为某种东西,而是追踪逻辑错误并修复它。

这不是一个奇怪的问题因为我在同一条船上:p

谷歌搜索“javascript use variable undefined”后到达这里。 我迷茫了因为我已经看到某个地方人们可以简单地在循环中使用未定义的变量。

也许我用不同的语言看过它


我找到了。 第一个代码成功执行,而第二个代码运行时错误。

第一个代码:

test();
function test() { x = 4; }
console.log(x); //this produce 4

第二代码:

test();
function test() { x[0] = 1; }
console.log(x[0]);

这对我来说似乎很奇怪。 让我们说我想调用一个函数: -

事情();

如果事情没有在任何地方确定我肯定会失败。

为什么你会期望使用一个名为foo的变量而不在代码中的任何位置定义它?

我觉得这个问题有点奇怪。 为了回答这个问题,我认为最好以另一种方式提出这个问题......

什么是预期的结果

if (foo) {
    // ...
}

其中foo未定义为变量?

我认为唯一可能的答案是if总是会评估为false而你永远不会执行那个块。

向您提出一个更直接的问题,为什么您希望代码能够工作,这些代码指的是不存在且未分配值的变量? 在上面定义的上下文中foo是什么?

底线是没有声明,后续声明没有任何意义。 foo不是一个可以自己评估的术语,所以你必须给解释器一个上下文来引用foo,这样它就可以对它进行评估。

有些语言在第一次分配时会自动为你创建变量(python和VB共享那个危险的特性),但即使是那些也无法在赋值之前评估变量,因此解释器会抛出错误。

如果你有一个编译器,它也会告诉你这个...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM