为什么这不是一个明确的整数类型以及如何清楚?

时间:2014-11-05 12:49:48

标签: javascript jquery types

我有这段代码:

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

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

time += 1000;在此“时间”之后是43761000 - 她开始连接文本“4376”和“1000”,这就是JavaScript引擎认为时间是字符串类型的证明。

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

5 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:1)

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

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

答案 2 :(得分:1)

您可以通过一元+使用强制,或者将其包含在基数为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"

答案 3 :(得分:1)

在将字符串添加1000之前,应将字符串转换为整数。

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

答案 4 :(得分:0)

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

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