2010-05-14 57 views
2

parseInt("7em", 10);返回7在我测试的所有浏览器[*]中。但我能依靠这个吗?Javascript:parseInt()与尾随字符

的原因,我想问的是,我要执行基于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,火狐3.6,歌剧10.5

回答

5

这是根据标准的行为。 ECMA-262第15.1.2.2节规定:

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

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

+0

谢谢,很好的答案(从规格最具体的片段)! – 2010-05-14 10:54:46

0

是。你可以依靠它。

1

为什么不走节约的道路,

parseInt(elem1.style.top.replace(/em/, ""), 10); 
+1

__always__包含基数! – 2010-05-14 10:45:12

+1

你只需要像'parseInt('08')''''''''''''''''''''''''''''''''''''''''''''''''这实际上最近在Chrome中刚刚发生了变化 - 他们摆脱了陷阱,并且很好。 – 2014-03-19 22:07:51

0

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

是的,parseInt比正则表达式更快,更易于使用。如果你使用jQuery? 那么它不会帮助你在这个问题上的计算或解析,但确定你的其他代码可能会更容易和更好。

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

相关问题