【问题标题】:Arithmetic with variables not working带变量的算术不起作用
【发布时间】:2016-05-17 20:55:14
【问题描述】:

由于某种原因,函数updateScore(result) 中的算术不能正常工作(稍后在代码中调用该函数)。 winstieslosses 按原样打印,但 lives 打印为 NaN。我知道 NaN 是什么意思。我还发现,出于某种原因,这些变量被创建为字符串。对我来说奇怪的是,它适用于五分之四的变量。没有一致性。我已经尝试使用Number(lives) 进行一些数字转换,但这也不起作用。关于如何确保将变量创建为数字并且算术运算有效的任何建议?

var wins = 0,
    ties = 0,
    losses = 0,
    lives = 5,
    previouscpuChoice = 0;

$("#startknapp").click(function(){
    var spiller = prompt("Hva heter du?");
    $("#userSelect").html(userMenu);
    $("#result").html("<h4>Velg figur, " + spiller + "</h4>");
    $("#status").html('<h4>Liv: <span id="life">' +lives+ '</span> - Seire: <span id="win">' + wins + '</span> - Uavgjort: <span id="tie">' + ties + '</span> - Tap: <span id="lose">' + losses + '</span>');
    console.log(typeof "lives");
    console.log(typeof "wins");
    });

function updateScore(result) {
    tie = document.getElementById("tie");
    win = document.getElementById("win");
    lose = document.getElementById("lose");
    lives = document.getElementById("life");
    console.log(typeof "wins");
    var imgSrc = "images/" + userChoice + "-" + result + ".png";

    if (result === "tie") {
    ties = ties + 1;
    tie.innerHTML = ties;
    $('.result-img').attr('src', 'images/tie.png');
    }

    if (result === "vant") {
    wins++;
    $('.result-img').attr('src', imgSrc);
    }

    if (result === "tapte") {
    losses++;
    lives--;
    lose.innerHTML = losses;
    life.innerHTML = lives;
    $('.result-img').attr('src', imgSrc);
    }
};

【问题讨论】:

  • getElementById 返回 DOM 元素,而不是输入的值。我建议你现在不要写 vanilla JS,改用 jQuery 之类的 JS 库。

标签: javascript string variables numbers integer


【解决方案1】:

想了想,觉得变量是字符串也行,换个角度看代码。你知道吗,这是一个简单的错误。

$("#startknapp").click(function(){
    var spiller = prompt("Hva heter du?");
    $("#userSelect").html(userMenu);
    $("#result").html("<h4>Velg figur, " + spiller + "</h4>");
    $("#status").html('<h4>Liv: <span id="life">' +lives+ '</span> - Seire: <span id="win">' + wins + '</span> - Uavgjort: <span id="tie">' + ties + '</span> - Tap: <span id="lose">' + losses + '</span>');
    console.log(typeof "lives");
    console.log(typeof "wins");
    });

function updateScore(result) {
    tie = document.getElementById("tie");
    win = document.getElementById("win");
    lose = document.getElementById("lose");
    life = document.getElementById("life");

原来updateScore(result)的最后一行是:

    lives = document.getElementById("life");

结果混合了两个变量(函数的局部变量(生命)和全局变量(生命)。所以最后这是一个错字。但是,我仍然对变量的事实很感兴趣可以是字符串,值可以是整数。

【讨论】:

  • 很高兴您设法解决了它。我不知道您是自己弄清楚还是查看了我的上一条评论,但我希望我所说的对您有所帮助。 Javascript 变量并不是真正的类型安全的,它可以使像 + 这样的算术运算为您提供有趣的结果,这可能会令人恼火。
  • 你的cmets当然有帮助。当我尝试您建议的解决方案时,我发现所有算术都不起作用。因此,它必须是与我分配变量的方式有关的问题。所以你对我帮助很大。现在,我要做的就是找出一个好的游戏循环。
【解决方案2】:

您是否尝试过以下方法?

var tie = parseInt(document.getElementById("tie").value);

您当前的代码:

document.getElementById("tie")

检索 DOM 元素而不是输入的值。所以您需要使用.value,然后将其解析为整数,因为输入值可能是您想要的数字的字符串表示形式,而不是整数值。

【讨论】:

  • 一开始我自己也在考虑,我会尝试并提供反馈。然而,令我感到奇怪的是,当我在分配变量后直接将它们打印到控制台时,它们被标识为字符串。
  • 您在顶部分配变量还是使用 UpdateScore 分配变量时? JS 中的“+”运算符有点奇怪。如果你有一个字符串 + 一个数字,那么它将连接而不是抛出错误或将它们加在一起。任何其他运算符都会将其转换为数字,例如,如果您的字符串被称为 x 并且您执行了 x*1,那么它会将其转换为数字并将其乘以 1(给您相同的值)。
  • 啊,我想我误会了。你的意思是当你运行console.log(typeof "lives");它返回字符串?在这种情况下,这是因为您正在检查“lives”是什么类型,它是一个字符串。您需要变量lives 的类型,因此您不应该像这样使用语音标记:console.log(typeof lives);。这将检查变量的类型,而不是你给它的字符串。
  • 您能否也将您的 HTML 添加到问题中?可能是您的 lives 元素选择器不正确。这就是为什么你得到 null,选择器无法“选择”任何东西
  • 您尝试使用document.getElementById("lives").value 进行选择,但您的跨度ID 为life。试试document.getElementById("life").value
猜你喜欢
  • 2014-07-04
  • 2018-04-01
  • 2018-03-24
  • 1970-01-01
  • 2023-03-20
  • 2015-10-27
  • 2016-08-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多