首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在if条件语句中赋值变量,这是不是很好的做法?

在if条件语句中赋值变量,这是不是很好的做法?
EN

Stack Overflow用户
提问于 2010-04-05 09:49:05
回答 9查看 204.9K关注 0票数 135

一年前,我从Java这样的经典面向对象语言迁移到了JavaScript。在Java中,绝对不推荐(甚至不正确)使用以下代码:

代码语言:javascript
复制
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开发人员看来,这是不是一个好做法?

EN

回答 9

Stack Overflow用户

回答已采纳

发布于 2010-04-05 10:05:34

我不建议你这么做。问题是,这看起来像是一个常见的错误,您尝试比较值,但使用单个=而不是=====。例如,当您看到以下内容时:

代码语言:javascript
复制
if (value = someFunction()) {
    ...
}

你不知道这是不是他们的本意,或者他们是否打算这样写:

代码语言:javascript
复制
if (value == someFunction()) {
    ...
}

如果你真的想就地完成这个任务,我建议你也做一个明确的比较:

代码语言:javascript
复制
if ((value = someFunction()) === <whatever truthy value you are expecting>) {
    ...
}
票数 144
EN

Stack Overflow用户

发布于 2013-03-13 14:47:38

我看不到任何证据表明这不是一种好的做法。是的,这看起来可能是一个错误,但这很容易通过明智的评论来纠正。举个例子:

代码语言:javascript
复制
if (x = processorIntensiveFunction()) { // declaration inside if intended
    alert(x);
}

为什么应该允许该函数第二次运行:

代码语言:javascript
复制
alert(processorIntensiveFunction());

因为第一个版本看起来很糟糕?我不同意这种逻辑。

票数 36
EN

Stack Overflow用户

发布于 2010-04-05 09:53:53

我做过很多次了。为了绕过JavaScript警告,我添加了两个括号:

代码语言:javascript
复制
if ((result = get_something())) { }

你应该避免使用它,如果你真的想使用它,在它上面写一条评论,说明你正在做什么。

票数 17
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2576571

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档