我需要评估以下表达式的结果:
startCell = 50
size = 9
cnt = 1
var res = startCell + (size * cnt) + cnt
但如果我发出警告res
,我就会得到591.我应该得到的是60.我试过这个:
var res = eval(startCell + (size * cnt) + cnt);
但它仍然给了我591.为什么会这样?
答案 0 :(得分:0)
确保添加整数而不连接某些字符串
var res = parseInt(startCell)+(parseInt(size)*parseInt(cnt))+parseInt(cnt);
答案 1 :(得分:0)
您发布的代码没有任何问题。 证明:http://jsfiddle.net/Q8M7S/
问题的原因在于我们看不到的代码。有些东西会将cnt
转换为字符串,但startCell
和size
仍为数字。如果它们都是字符串,那么您将获得5091
而不是591
: http://jsfiddle.net/Q8M7S/1/
可能是cnt
被初始化为字符串:
startCell = 50
size = 9
cnt = "1"
或者它可以初始化为数值,但随后通过JavaScript的类型强制转换为字符串:
cnt = 1
cnt += ""
有很多方法可以实现,没有人看到代码就无法确定。我建议您查找在初始化它和使用它之间修改cnt
的每一行。
另外,请注意eval
。如果使用不当会有危险,而且性能很糟糕。您应该尽可能避免在任何技能级别使用eval
。