一年前,我从Java这样的经典面向对象语言迁移到了JavaScript。在Java中,绝对不推荐(甚至不正确)使用以下代码:
if(dayNumber = getClickedDayNumber(dayInfo))
{
alert("day number found : " + dayNumber);
}
function getClickedDayNumber(dayInfo)
{
dayNumber = dayInfo.indexOf("fc-day");
if(dayNumber != -1) //substring found
{
//normally any calendar month consists of "40" days, so this will definitely pick up its day number.
return parseInt(dayInfo.substring(dayNumber+6, dayNumber+8));
}
return false;
}
基本上,我刚刚发现我可以将一个变量赋给if条件语句中的一个值,然后立即检查赋值,就好像它是布尔值一样。
为了更安全起见,我通常将其分成两行代码,首先赋值,然后检查变量,但现在我发现了这一点,我只是想知道在有经验的JavaScript开发人员看来,这是不是一个好做法?
发布于 2010-04-05 10:05:34
我不建议你这么做。问题是,这看起来像是一个常见的错误,您尝试比较值,但使用单个=
而不是==
或===
。例如,当您看到以下内容时:
if (value = someFunction()) {
...
}
你不知道这是不是他们的本意,或者他们是否打算这样写:
if (value == someFunction()) {
...
}
如果你真的想就地完成这个任务,我建议你也做一个明确的比较:
if ((value = someFunction()) === <whatever truthy value you are expecting>) {
...
}
发布于 2013-03-13 14:47:38
我看不到任何证据表明这不是一种好的做法。是的,这看起来可能是一个错误,但这很容易通过明智的评论来纠正。举个例子:
if (x = processorIntensiveFunction()) { // declaration inside if intended
alert(x);
}
为什么应该允许该函数第二次运行:
alert(processorIntensiveFunction());
因为第一个版本看起来很糟糕?我不同意这种逻辑。
发布于 2010-04-05 09:53:53
我做过很多次了。为了绕过JavaScript警告,我添加了两个括号:
if ((result = get_something())) { }
你应该避免使用它,如果你真的想使用它,在它上面写一条评论,说明你正在做什么。
https://stackoverflow.com/questions/2576571
复制相似问题