【问题标题】:Mathematical expression with booleans [closed]带有布尔值的数学表达式[关闭]
【发布时间】:2012-12-05 08:40:41
【问题描述】:

我们的导师在测验中给了我们以下一段代码,我不知道发生了什么。到目前为止还没有收到她的回音,有人可以对此有所了解吗?到目前为止,我在编程学习中还没有见过这样的表达方式

var a = 3;
var b = 5;
var c = 7;
var d = 8;
var e;

e = a < b && c++ > d;

document.write(c);

答案是 7

e = a > b && c++ > d;

document.write(c);

答案是 8

【问题讨论】:

  • 您是否应该找出两者中的哪一个是正确的结果?你有什么不明白的?
  • 提示:首先查看运算符优先级并写出隐含的括号。
  • 反之亦然,不是吗?这是由于 true/false 布尔表达式,在第一个示例中,表达式的左侧部分是真实的,因此右侧部分被评估并增加 can。在第二种情况下,左边部分是假的,右边部分没有被评估
  • Leah,你确定这些是你得到的结果吗?我认为@Glutamat 是正确的,第一个答案应该是 8,第二个答案应该是 7。我想知道回答你问题的 3 个人怎么没有注意到这一点?!
  • @everyone。糟糕,当我写出上面的问题时,我改变了答案——我没有注意到,因为我一开始不明白发生了什么。尽管如此,你的回答仍然让我明白了发生了什么,谢谢:)

标签: javascript math boolean expression


【解决方案1】:
  1. a c 变量。
  2. a > b == false,javascript VM 不计算下一部分,因为当逻辑表达式 and 的第一个参数为 false 时,不需要这样做。

【讨论】:

    【解决方案2】:

    e = a > b && c++ > d;

    这样的条件 - (exp1 && exp2),当 exp1 结果为假时,永远不会计算 exp2。所以在上面的表达式中,你有 a > b && c++ > d。由于 a 不大于 b 因此,即使有 ++ 运算符, c 也永远不会递增。所以当你打印 c 时,它是 7。

    然而,e = a d; a小于b,继续计算c++ > d,结果c递增,值为8。

    【讨论】:

    • 谢谢,我没有看到这个,只是回复了之前的帖子询问是否确实如此。我不知道可以将值作为布尔表达式的一部分分配给变量。所以 e 是一个布尔值 - 由于下面的表达式,javascript 会自动将其变为布尔值(我仍然对这种动态类型感到头疼)
    • @LeahThomas 是的,该值可以作为表达式的一部分进行更改。增量运算符是实现这一目标的一种方式。
    • 我只是没有意识到布尔表达式中会发生这种事情,我以为他们只是测试了一个条件。那么,出于兴趣,这也适用于 java 吗?
    • @LeahThomas 每个表达式都会产生一个值,这就是表达式的作用:它们将值组合起来给出新的值。 if() 不需要比较作为条件,它需要一个。所以是的,这也适用于 Java。
    【解决方案3】:
    var a = 3;
    var b = 5;
    var c = 7;
    var d = 8;
    var e;
    
    e = a < b && c++ > d;
    
    document.write(c);
    

    重要的部分是 c=7

    e = a < b && c++ > d;
    

    这使得 c=8 (c++)

    第二个 e = a > b && c++ > d;

    因为 a 不大于 b,Javascript 不能解决第二部分(因为不管它的结果如何,e 的结果都是 false)

    所以第二个应该是 7,顶部应该是 8 给定的值

    http://jsfiddle.net/ZYVrH/1/为例

    【讨论】:

    • 所以在第二个中,当 a d(为假)。但是因为它已经到了这一步,这意味着 c 增加了吗?我想让我感到困惑的是我没有意识到变量可以作为布尔表达式的一部分进行更改
    • 是的,c++ 的意思是 c=c+1,所以当计算第二部分时,变量会递增。仅当第一部分为真时才评估第二部分。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多