【问题标题】:Pushing a variable's value into an array is returning Void 0?将变量的值推入数组返回 Void 0?
【发布时间】:2013-06-04 17:21:54
【问题描述】:

我正在创建一个简单的井字游戏,我目前正在尝试将用户的支票存储到变量中。问题是,使用我当前的代码,xMoves 和 oMoves 数组返回 Void 0。这段代码有什么问题? http://jsfiddle.net/Z6StP/

var storeMoves = function () {
    if (currentPlayer === X) {
        xMoves.push(cellTracker);
    } else if (currentPlayer === O) {
        oMoves.push(cellTracker);
    }
};

【问题讨论】:

  • cellTracker 的变量在该函数中未定义。
  • @Barmar 你指的是我帖子中的代码还是链接中的代码?
  • 它们是相同的代码。答案更详细地解释了问题。

标签: javascript jquery arrays function variables


【解决方案1】:

void 0; 只是表示undefined 值的另一种方式。

.push() 方法没有返回 void 0。他们返回新的数组长度。

您在控制台中看到的是带有void 0 (或undefined 的数组。那是因为您将 cellTracker 推送到数组中,而数组从未分配过值。

确实有一个分配给cellTracker,但这是一个局部变量。删除前面的var,您将分配给外部的。

/*var*/ cellTracker = $(this).attr('id');

【讨论】:

  • 最好将cellTracker 作为参数传递给storeMoves,而不是使用外部变量。
  • @Barmar:是的,或者只是通过this.id
  • 天哪,我想我应该把它当作我应该去睡觉的信号......谢谢你指出这一点。
【解决方案2】:

因为您在td's 的点击函数内再次定义了变量cellTracker。 删除定义并使用已经定义的变量,它将起作用。

喜欢:

$('td').one('click', function () {
    turnCount += 1;
    setCurrentPlayer();
    $(this).text(currentPlayer);
    cellTracker = $(this).attr('id');
    storeMoves();
    console.log(turnCount, xMoves, oMoves);
});

小提琴:http://jsfiddle.net/IrvinDominin/Z6StP/1/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多