pos1和pos2都是javascript编号,但当我从另一个中减去一个时,我得到了NaN。
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);
答案 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;,这导致错误。