Javascript 为什么这不是一个清晰的整数类型,以及如何使其清晰?
我有以下代码:Javascript 为什么这不是一个清晰的整数类型,以及如何使其清晰?,javascript,jquery,types,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(
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)
属性数据值
包含毫秒值,并存储在变量时间
中
这是我的“调试”输出:
var time=$(this.attr(“数据值”)代码>时间=4376
如果(时间>0){
为真,因为4376大于0
time+=1000;
在这个“time”是43761000之后,它开始连接文本“4376”和“1000”,这证明JavaScript引擎认为时间是字符串类型
如何明确时间应该是整数类型?您需要将使用attr()
检索的字符串转换为数字,例如
var time = +($(this).attr("data-value"));
var time = +$(this).attr("data-value");
您需要将使用attr()
检索的字符串转换为数字,例如
var time = +($(this).attr("data-value"));
var time = +$(this).attr("data-value");
可以使用一元加号运算符将字符串属性值转换为数字(也可以使用parseInt()
可以使用一元加号运算符将字符串属性值转换为数字(也可以使用parseInt()
您可以通过一元数+
使用强制,或者仅将其包装在以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中,您尝试尽可能少地修改输出。如果您想将两个数字字符串连接在一起,您必须进行大量的破解:
要获得“100010”
,而不是var a=“1000”+“10”
,您必须执行以下操作
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"
您可以通过一元数+
使用强制,或者仅将其包装在以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中,您尝试尽可能少地修改输出。如果您想将两个数字字符串连接在一起,您必须进行大量的破解:
要获得“100010”
,而不是var a=“1000”+“10”
,您必须执行以下操作
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"
在将字符串与1000相加之前,应将其转换为整数
var time = parseInt($(this).attr("data-value"));
在将字符串与1000相加之前,应将其转换为整数
var time = parseInt($(this).attr("data-value"));
因为javascript中没有整数类型?可能您可以使用javascript函数Number。例如,var time=Number($(this).attr(“数据值”));可能是@Kroltan的复制品是的,可能是,但我也问了一个问题为什么——我只是把它忘在我的身体里了。为什么虚拟机不理解这是一个数字?对我们人类来说,这是一个数字,很明显,不是吗?@Espen,因为这将是一个非常不愉快的偏离惯例的行为:在JS中,你试图修改一点点这可能是您的输出。如果您想将两个数字字符串连接在一起,您必须进行大量的操作。我将在回答中详细解释。因为javascript中没有整数类型?可能您可以使用javascript函数Number。例如,var time=Number($(this).attr(“data value”));可能是@Kroltan的复制品是的,可能是,但我也问了一个问题为什么——我只是把它忘在我的身体里了。为什么虚拟机不理解这是一个数字?对我们人类来说,这是一个数字,很明显,不是吗?@Espen,因为这将是一个非常不愉快的偏离惯例的行为:在JS中,你试图修改一点点这可能是您的输出。如果您想将两个数字字符串连接在一起,您必须进行大量的操作。我将在回答中详细解释。parseInt(time,10)
这样您就不会得到八进制表示法的奇怪结果。parseInt(time,10)
所以八进制符号不会产生奇怪的结果。也许这是有意义的。我只是认为vm应该不同于time+=1000和time+=1000。这行代码应该改变类型规模,让vm认为时间是一个数字而不是一个字符串。但也许它不能中途更改类型…?@Espen它可以,但对于可能产生细微错误的东西来说,它的开销要大得多。数字相加是可交换的,字符串串联不是。最好假设如果e是剧中的字符串,它将是一个串联。请记住,a+=b
相当于a=a+b
。此外,它更易于阅读,可以明确地保证+
运算符的两边都是相同的类型。简言之,“因为标准这么说”.也许有道理。我只是觉得虚拟机应该不同于time+=1000和time+=1000。这行代码应该改变类型规模,让vm认为时间是一个数字而不是一个字符串。但也许它不能中途更改类型…?@Espen它可以,但对于可能产生细微错误的东西来说,它的开销要大得多。数字相加是可交换的,字符串串联不是。最好假设如果e是剧中的字符串,它将是一个串联。请记住,a+=b
相当于a=a+b
。此外,它的可读性更高,可以明确保证+
运算符的两边都是相同的类型。简言之,“因为标准这么说”。