【问题标题】:Does js ever skip statements if outcome is already known?如果结果已知,js 是否会跳过语句?
【发布时间】:2014-01-21 05:55:31
【问题描述】:

如果结果已知,javascript 是否会跳过语句?我问这个是因为由于某种原因,当结果为alert('You Lose') 时,我的代码不是console.log(b)。当结果为 alert('You Win') 时,它会执行 console.log。

C 始终等于 true

所以当a = false 不是console.log(b),但是当a = true 它是console.log(b)

为什么?

function example(c) {

var b = true;

    var a = validateFunction($('.div1'));    // returns true or false

    console.log(a);


    if (c === true) {  // c always equals true
        b = validateFunction($('.div2'));  // returns true or false
        console.log(b);
    }


    if (a === true && b === true) {
        alert('You Win');
    }
    else {
        alert('You Lose');
    }


}

【问题讨论】:

  • validateFunction 是做什么的?您的 c 变量未使用 var 关键字声明,这意味着它可能是隐式全局的,并且正在被更改。另外,您如何调用示例函数?如果你没有传入一个变量,那么它将有一个未定义的值,这是假的。
  • validateFunction 只是对一些东西做一些数学运算,但只返回真或假。对 c var 部分感到抱歉。我在这里发布的方式与我在代码中的方式不同。为此,C 始终等于 true。
  • 据我所知,如果c严格等于等于布尔值true,您的代码只会执行console.log(b)。它与任何其他变量值无关。你的问题到底是什么?
  • 回答直接问题:不,它没有。

标签: javascript if-statement console.log


【解决方案1】:

在我看来 c 不是 === 真的。为了验证,向if (c === true) 添加一个else 子句,其中包含console.log('C is not === true.'); 的效果

【讨论】:

    【解决方案2】:

    是的,大多数语言从左到右解析 if 语句,并在得到确定结果后立即停止。

    由于你在 if 语句中的第一个表达式返回 false,整个语句不能返回 true,所以它甚至不尝试解析它。

    如果第一个表达式为假,OR 语句中也会发生同样的情况。

    【讨论】:

    • -1:你说的是逻辑捷径——这与手头的问题无关。
    猜你喜欢
    • 1970-01-01
    • 2021-12-31
    • 1970-01-01
    • 2012-09-03
    • 2020-06-14
    • 2019-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多