Javascript:一些变量已定义,一些未定义

Javascript:一些变量已定义,一些未定义,javascript,html,random,undefined,Javascript,Html,Random,Undefined,我正在写一个基本的赌场javascript游戏,随机选择3个数字1-10。如果每个数字都是7,它将显示一个警告框,说“你赢了!”。在下面的函数中: function StartSpin(){ var one; var two; var three; var cone; var ctwo; var cthree; var one = Math.floor((Math.random() *

我正在写一个基本的赌场javascript游戏,随机选择3个数字1-10。如果每个数字都是7,它将显示一个警告框,说“你赢了!”。在下面的函数中:

function StartSpin(){
        var one;
        var two;
        var three;
        var cone;
        var ctwo;
        var cthree;
        var one = Math.floor((Math.random() * 10) + 1);
        var two = Math.floor((Math.random() * 10) + 1);
        var three = Math.floor((Math.random() * 10) + 1);
        if(one == 1){var cone = "Ace";}
        if(two == 1){var ctwo = "Ace";}
        if(three == 1){var cthree = "Ace";}
        document.getElementsByClassName("Spinner")[0].innerHTML= cone
        document.getElementsByClassName("Spinner")[1].innerHTML= ctwo
        document.getElementsByClassName("Spinner")[2].innerHTML= cthree
    }
在单击按钮开始随机化之前,在实际页面上显示: -|-|-. 单击时,它将-'设置为随机数。每个数字/集合都表示未定义,但有时会说“Ace”表示为1。所以它可能会说:未定义| Ace |未定义,或未定义|未定义|未定义,等等。 以下是HTML:

<div id="GameOne">
    <h1>~ Game One ~</h1>
    <h2>Try to get three 7's!</h2>
    <span class="so Spinner">--</span> | 
    <span class="st Spinner">--</span> | 
    <span class="sth Spinner">--</span>
    <br/>
    <button id="SpinButton" onclick="StartSpin()">Spin!</button>
</div>

编辑:我重新定义了变量,以查看这是否有助于解决javascript代码中的未定义问题。仅供参考,它们被设置为未定义,因为在随机选择1时,您仅设置变量cone、ctwo、cthree。我想如果没有画A,你想显示数字吗

function StartSpin() {
    for (var i = 0; i < 3; i++) {
       var num = Math.floor((Math.random() * 10) + 1);

       if (num == 1) {
           num = 'Ace';
       }

       document.getElementsByClassName("Spinner")[i].innerHTML = num;
    }
}

您已经在不同的作用域中声明了变量两次

function StartSpin(){
...
        var cone;
        var ctwo;
        var cthree;
...
        if(one == 1){var cone = "Ace";} // here remove var, otherwise JS will scope it to the IF.
        if(two == 1){var ctwo = "Ace";}
        if(three == 1){var cthree = "Ace";}
...
    }
仅当一、二或三分别等于1时,才定义圆锥体、ctwo和Ctree。否则,变量不会被初始化,这就是为什么它们没有定义

您可以尝试以下方法:

看起来您在变量如何工作方面遇到了一些问题。在大多数情况下,除非得到1,否则cone、ctwo和cthree是未定义的。此外,创建变量时,只需在变量前面声明var。以后的引用仅使用变量名:

var i = 1;
var j = i + 5;
console.log("i is", i, "and j is", j); // will print `i is 1 and j is 5`
没有设置值的已声明变量将是未定义的

在代码中,您试图将1转换为字符串Ace,但在所有其他情况下,您最终会抛出1、2和3中的值。这应该起作用:

功能启动PIN{ //函数使数字介于1和10之间,如果1返回Ace 函数随机数空间{ 变量编号=Math.floorMath.random*10+1; //如果它是'1',请检查此处,并返回Ace,否则返回以前存储的值 如果数字===1{ 返回Ace; }否则{ 返回号码; } } //用三个随机数填充.Spinner的前三个元素 document.getElementsByClassNameSpinner[0]。innerHTML=RandomNumberSpace; document.getElementsByClassNameSpinner[1].innerHTML=RandomNumberACE; document.getElementsByCassNamesPinner[2].innerHTML=RandomNumberSpace; } ~z~第一局~ 试着得到三个7! - | - | - 快速旋转
简单的回答是,如果随机得到数字1,则只给出变量值,而不是未定义的值。否则它们将保持未定义状态——这是JavaScript中变量的默认值

以下是一些经过认真整理的逻辑:


作为旁注,三个七还是三个一?你可能想在这个问题上下定决心。

为什么要多次重新定义变量?cone、ctwo和cthree只有在它们各自的值为1时才被定义。删除了我键入的所有内容,因为Hobo Sapiens发布了几乎相同的内容。如果1/2不==1圆锥,那么ctwo和CTHRE是未定义的。这是他的逻辑,我想他知道他为什么这么做。如果他不。。。。也许我们应该做点别的,对吧?是的,我想显示这个数字,即使它不是A。我试过这段代码,它没有说未定义,但在Chrome日志中有。它不会显示实际数字,只显示ace。谢谢,当最短答案接受时间结束时,将接受作为答案!他和你一样错,除了你认为var意味着旧的Basic之外,主要的问题是你使用cone,ctwo和cthree变量来显示,但是你只在滚动为1时设置它们。每隔一次,它们都是未定义的。JavaScript是函数作用域。VarX是否在if语句中并不重要——它将被提升到最近函数的顶部。尽管他声明了两次变量,但这不是真正的问题。只有当第一个变量等于1时,他才声明变量。现在检查变量yyy=;iftrue{var yyy='rrr';}返回console.logyy;将打印“rrr”;谢谢你的通知。关于逻辑。。。是他,对吗?
var k;
console.log(k); // will print `undefined`
function roll() {
  var n = Math.floor((Math.random() * 10) + 1);
  return (n === 1 ? 'Ace!' : n);
}

function StartSpin(){
  var slots = document.getElementsByClassName("Spinner");

  for (var i = 0, e = slots.length; i < e; i++) {
    slots[i].innerHTML = roll();
  }
}

document.getElementById('SpinButton').addEventListener('click', StartSpin);