-1

我需要评估以下表达式的结果:

startCell = 50
size = 9
cnt = 1
var res = startCell + (size * cnt) + cnt

但如果我提醒res,我会得到 591。我应该得到的是 60。我试过这个:

var res = eval(startCell + (size * cnt) + cnt); 

但它仍然给我 591。为什么会这样?

4

2 回答 2

1

确保您添加整数而不是连接一些字符串

var res = parseInt(startCell)+(parseInt(size)*parseInt(cnt))+parseInt(cnt);
于 2013-10-03T10:52:39.823 回答
0

您发布的代码没有任何问题。证明:http: //jsfiddle.net/Q8M7S/

您的问题的原因在于我们看不到的代码。有些东西正在cnt变成一个字符串,但startCell仍然size是数字。如果它们都是字符串,你会得到5091而不是:http 591: //jsfiddle.net/Q8M7S/1/

可能cnt是被初始化为一个字符串:

startCell = 50
size = 9
cnt = "1"

或者它可以被初始化为一个数值,然后通过 JavaScript 的类型强制转换为一个字符串:

cnt = 1
cnt += ""

它可能发生的方式有很多种,没有人不看代码就无法确定。我建议您查找cnt在初始化时间和使用时间之间修改的每一行。

另外,请注意eval. 使用不当有潜在的危险,而且对性能很不利。eval在任何技能水平上,您都应该尽可能避免使用。

于 2013-10-11T17:08:11.167 回答