布尔值不适用于 If 语句(Javascript)

Posted

技术标签:

【中文标题】布尔值不适用于 If 语句(Javascript)【英文标题】:Boolean Is Not Working With If Statement(Javascript) 【发布时间】:2021-10-16 09:36:20 【问题描述】:

我正在构建这个塔罗牌程序,但布尔语句有问题。我只想显示何时执行 TRUE 语句,但由于某些原因,该程序也在执行 FALSE 语句,并且给了我一个我不想要的空白页。这是我的项目https://jsfiddle.net/4vsyxj3g/的链接。

这是我想要完成的。塔罗牌大约有72张牌,一张牌可以是过去、现在或未来,但不能重复。例如,一张牌不能同时在过去、现在或将来。程序必须为过去、现在和未来选择一张独特的卡片。不管怎样,谢谢大家的帮助。

代码如下:

  let a = Math.floor(Math.random() * 3)
  let b = Math.floor(Math.random() * 3)
  let c = Math.floor(Math.random() * 3)

let x = true
console.log(a + " " + b + " " + c); 
 


if (x)


    if(a != b && a != c && a != c && b != c)

  



    let randomPastCard = document.getElementById("textNamePast")
    randomPastCard.textContent = card[a].name
    
    let pastTextCard = document.getElementById("pastText")
    pastText.textContent = card[a].past
    
    
    var img = document.createElement("img");
    img.src = card[a].img;
    document.getElementById('pastTarotImg').appendChild(img);
    
    
    
    let randomPresentCard = document.getElementById("textNamePresent")
    randomPresentCard.textContent = card[b].name
    
    
    let presentTextCard = document.getElementById("presentText")
    presentTextCard.textContent = card[b].present
    
    var img = document.createElement("img");
    img.src = card[b].img;
    document.getElementById('presentTarotImg').appendChild(img);
    
    
    
    
    let randomFutureCard = document.getElementById("textNameFuture")
    randomFutureCard.textContent = card[c].name
    
    
    let futureTextCard = document.getElementById("futureText")
    futureTextCard.textContent = card[c].future
    
    var img = document.createElement("img");
    img.src = card[c].img;
    document.getElementById('futureTarotImg').appendChild(img);

  
console.log("true1");

    x = true

  
<hh class="html">
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <div id="textNamePast"></div> 
    <div id="pastText"></div> <br>
    <div id="pastTarotImg"></div>

    
    <div id="textNamePresent"></div> 
    <div id="presentText"></div> <br>
    <div id="presentTarotImg"></div>



    <div id="textNameFuture"></div> 
    <div id="futureText"></div>    <br>
    <div id="futureTarotImg"></div>

    <br><br>

    
    <br><br>
    
    
    
<script src="tarot.js"></script>
</body>
</html>




else

    console.log("false");
    x = false


【问题讨论】:

您已将let x = true 设置为始终为真。 【参考方案1】:

您的代码非常好。如果你不断地重新加载你的页面,它实际上会给你一个渲染的版本。这里的问题是,如果你得到的数字相等,你就什么也不做。

如果您有一个 while 循环,该循环基本上会一直运行,直到您获得唯一的数字,然后使用它,您就可以解决这个问题。

你可以这样做:

while (a === b || a === c || a === c || b === c) 
  let a = Math.floor(Math.random() * 3)
  let b = Math.floor(Math.random() * 3)
  let c = Math.floor(Math.random() * 3)


// Then use those values like normal here

这应该可以解决您的问题。在事情的另一面,我可以问一下。你为什么要这样做?:

let x = true;
if (x) 
  // all code here

【讨论】:

它适用于您的代码。这是链接jsfiddle.net/3dy7ano9。我使用 let x= true 是因为我认为它可以与布尔语句一起使用,但它没有。

以上是关于布尔值不适用于 If 语句(Javascript)的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript 中没有额外的布尔类型转换

Javascript的条件语句与switch结构

javascript 语句

Arrays.setAll 不适用于布尔值

为啥 ~(true^true) 不正确?布尔运算符(否定)适用于“无符号字符”,但不适用于布尔值? (C++)

JavaScript Switch