【问题标题】:'And' appears to return 'true' when 'true and false' (when answer == b, answer != a && b returns true)当“真假”时,“和”似乎返回“真”(当答案 == b 时,答案!= a && b 返回真)
【发布时间】:2018-04-18 03:25:56
【问题描述】:

我无法弄清楚为什么这不起作用。如果我在提示中输入“否”,我会再次得到相同的提示,这意味着 do 循环再次执行,因为 while 语句返回 true。然而,根据我的逻辑,当给出“否”的答案时,while 语句应该返回 false 并结束 do 循环。当 (answer != "Yes") 为真且 (answer != "No") 为假时,具有一个真操作数和一个假操作数的“与”运算符不应该返回假(真 && 假 == 假)吗?我在这里做错了什么?其他一切正常。

do {
  var answer = prompt("Do you want dinner? Yes or No."); 
} while (answer != "Yes" && "No");
if (answer == "Yes") {
  alert("Great, there is food in the fridge!"); }
else {
  alert("Ok. I will ask again later."); }

【问题讨论】:

  • "Yes" && "No" 是做什么的?
  • @PHPglue 否,answer != "Yes" && "No" 评估为假(当答案为“是”时)或“否”
  • @PHPglue 我也是这么想的。但在实践中,当答案为“是”时,它似乎评估为假,但当答案为“否”时,它似乎为真
  • && 运算符不能用于列出替代值以针对!= 进行测试。您的 while 条件 answer != "Yes" && "No" 就像是在说 (answer != "Yes") && "No"
  • @Jordan "Yes" && "No" 计算结果为 "No",但您的代码不包含 "Yes" && "No" 作为子表达式,仅包含 (answer != "Yes") && "No"

标签: javascript


【解决方案1】:

您的条件表单错误。

do {
  var answer = prompt("Do you want dinner? Yes or No."); 
} while (answer != "Yes" && answer != "No");
if (answer == "Yes") {
  alert("Great, there is food in the fridge!"); }
else {
  alert("Ok. I will ask again later."); }

【讨论】:

    【解决方案2】:
    function logAnswer(answer) {
      console.log(answer != "Yes" && "No");
    }
    
    logAnswer("Wub") --> false && true --> false
    logAnswer("Yes") --> false && true --> false
    logAnswer("No")  --> true && true  --> true
    

    && "No" 会将字符串“No”评估为真。 answer 应该有两个评估。我个人认为 OR 运算符在这里可能会更好读。

    while (!(answer == "Yes" || answer == "No"))  // OR operator
    while (answer != "Yes" && answer != "No")    // AND operator
    

    【讨论】:

      【解决方案3】:

      您必须在&& 的两侧编写完整的测试。 "No" 将始终评估为 true

      while (answer != "Yes" && answer != "No")
      

      【讨论】:

        【解决方案4】:

        while 条件错误。第二部分永远是真的。

        试试这个:

        while (answer != "Yes" && answer != "No");
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-04-12
          • 2013-03-23
          • 2014-09-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多