无法减去两个JavaScript数字

时间:2014-06-26 19:36:46

标签: javascript math casting int nan

pos1和pos2都是javascript编号,但当我从另一个中减去一个时,我得到了NaN。

http://jsfiddle.net/2akeL/2/

var str = "2014/6/3 ";
var y = str.substr(2,2);
var pos1 = str.indexOf("/");
var pos2 = str.indexOf("/", pos1+1);
pos2 = ((pos2-pos1)==2 ? 1 : 2 );
var m = str.substr(pos1+1, pos2);
var d = str.substr(pos2+1);
var i = (m.length < 2 ? str("0") + m : m) + "/" + (d.length = 2 || "0" + d) + "/" + y + "*";
alert(pos1 + "|" + pos2 + "|" + m + "|" + pos2);

1 个答案:

答案 0 :(得分:1)

问题在于评估顺序的JavaScript规则。您的警报表达式的评估方式如下所示:

alert((((((((pos1 + "|") + pos2) + "|") + m) + "|") + pos2) - pos1));

因此&#34; pos2&#34;在&#34; pos1&#34;之前附加到字符串被减去。与加法运算符不同,-没有字符串语义,因此字符串最终为NaN

写下这样的一行:

alert(pos1 + "|" + pos2 + "|" + m + "|" + (pos2-pos1));

通过对减法操作加括号,强制在构造其余字符串之前计算的结果。

此外,您的代码在某一时刻包含对不存在的函数的调用&#34; str&#34;,这导致错误。