【问题标题】:Can't subtract two JavaScript numbers不能减去两个 JavaScript 数字
【发布时间】:2014-08-17 19:03:31
【问题描述】:

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);

【问题讨论】:

  • 所以通过记录你的值来调试你的代码。有时你只需要弄脏你的手。
  • 你的问题是什么?
  • @cookiemonster 我做到了。 pos1 是 4,pos2 是 6。
  • @admdrew 为什么当我从 pos2 中减去 pos1 时会得到 NaN?
  • 阅读运算符优先级和关联性。调试将涉及执行console.log(pos2-pos1); 之类的操作并查看它是否有效,然后尝试console.log("|" + pos2-pos1); 并查看它没有,然后从中推断出可能的问题。

标签: javascript math casting int nan


【解决方案1】:

问题在于评估顺序的 JavaScript 规则。您的警报表达式被评估为好像它是这样编写的:

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

因此,在减去“pos1”之前将“pos2”附加到字符串。与加法运算符不同,- 没有字符串语义,因此字符串以NaN 结尾。

这样写那一行:

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

通过给减法运算加上括号,你可以强制在构造字符串的其余部分之前计算结果。

此外,您的代码有一次包含对不存在的函数“str”的调用,这导致了错误。

【讨论】:

  • 所以现在我将操作移出警报...仍然无法正常工作。
  • 我在这里,认为str("0") 是无效的,因为str 不是一个函数,但它可能在旧IE 中工作。
  • @ism 以什么方式不起作用?你到底做了什么?您是否尝试过简单地为减法加上括号?
  • @Pointy 提醒不会在新小提琴中弹出
  • @ism 这是因为您的代码中的错误。请参阅this repaired version,我将str("0") 替换为"0"
猜你喜欢
  • 2013-10-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多