为什么这不是一个明确的整数类型,以及如何使其明确

Why is this not a clear integer type and how to make it clear?

本文关键字:类型 何使其 整数 一个 为什么 这不是      更新时间:2023-09-26

我有这个代码:

wallboard.data.Timer = function () {
    $("div[data-value]").each(function () {
        var time = $(this).attr("data-value");
        if (time > 0) {
            time += 1000;
            $(this).attr("data-value", time).text(TimeToText(time));
        }
    });
}

函数TimeToText()只是取一个毫秒值并将其输出为hour:seconds (00:00)

属性data-value包含一个毫秒值,并存储在变量time中。

这是我的"调试"输出:

var time = $(this).attr("data-value");时间=4376

当4376大于0 时,if (time > 0) {为真

这个"时间"之后的time += 1000;是43761000,它开始连接文本"4376"answers"1000",这证明JavaScript引擎认为时间是字符串类型。

如何明确时间应该是整数类型?

var time = $(this).attr("data-value");
var timeInt = parseInt(time) + 1000;

您可以通过一元+使用强制,也可以将其封装在基数为10的parseInt中。

wallboard.data.Timer = function () {
    $("div[data-value]").each(function () {
        var time = parseInt($(this).attr("data-value"), 10);
        if (time > 0) {
            time += 1000;
            $(this).attr("data-value", time).text(TimeToText(time));
        }
    });
}

此外,您还可以搜索"javascript字符串到数字",您会发现数十亿的结果。

编辑:为什么不将数字字符串自动解释为数字?因为这将是一个非常令人不快的偏离惯例的行为:在JS中,你试图尽可能少地修改你的输出。如果你想把两个数字字符串连接在一起,你必须做很多技巧:

你必须做这样的,而不是var a = "1000" + "10"来获得"100010"

var a = ["1000", "zz10"].join(""); // note the "zz", so it's not plain numeric.
a = a.replace("zz", ""); // replace "zz" with nothing.
// now `a` would be "100010"

您需要将用attr()检索到的字符串转换为数字,例如

var time = +($(this).attr("data-value"));

您可以使用一元加号运算符将字符串属性值转换为数字(也可以使用parseInt())

var time = +$(this).attr("data-value");

在将字符串与1000相加之前,应该将其转换为整数。

var time =  parseInt($(this).attr("data-value"));