Javascript:带有尾随字符的parseInt()

时间:2010-05-14 10:38:21

标签: javascript jquery

parseInt("7em", 10);在我测试的所有浏览器中返回7 [*]。但我可以依靠这个吗?

我问的原因是,我想基于em执行一些计算,比如

/* elem1.style.top uses em units */
elem2.style.top = parseInt(elem1.style.top, 10) + 1 + "em";

我可以使用正则表达式执行此操作,但parseInt更易于使用,并且可能更快一些。或者是否有其他解决方案(可能使用jQuery)?

[*]到目前为止测试过:IE 6,IE 8,Safari 4,Firefox 3.6,Opera 10.5

5 个答案:

答案 0 :(得分:5)

这是符合标准的行为。 ECMA-262第15.1.2.2节规定

  

parseInt只能将字符串的前导部分解释为整数值;它忽略了任何不能被解释为整数表示法的一部分的字符,并且没有任何指示忽略任何这样的字符。

我更担心的是,在将来的某个时刻,elem2.style.top的单位会发生变化。在这种情况下,此代码可能会将200px转换为200em,这可能会造成很大的混淆。

答案 1 :(得分:1)

是的,你可以依靠这个。 转到http://www.ecma-international.org/publications/files/ECMA-ST-ARCH/ECMA-262,%203rd%20edition,%20December%201999.pdf并搜索“15 .1.2.2”部分,parseInt

答案 2 :(得分:1)

为什么不采取

的拯救之路
parseInt(elem1.style.top.replace(/em/, ""), 10);

答案 3 :(得分:0)

是。你可以信赖它。

答案 4 :(得分:0)

parseInt("7em", 10);将永远返回7,是的。 parseInt()返回字符串中的第一个值。

是的,parseInt比正则表达式更快更容易使用。

而且,你应该使用 jQuery 吗? 好吧,它不会在这个问题上计算或解析那么多,但确保你的其他代码可能会更容易和更好。

http://www.w3schools.com/jsref/jsref_parseInt.asp