Javascript:parseInt()和尾随字符

Javascript:parseInt()和尾随字符,javascript,jquery,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

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是。你可以信赖它。

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

parseInt只能将字符串的前导部分解释为整数值;它忽略任何不能解释为整数表示法一部分的字符,并且没有给出忽略任何此类字符的指示


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

是的,您可以信赖此代码。
转到并搜索“15.1.2.2”部分,parseInt

为什么不使用

parseInt(elem1.style.top.replace(/em/, ""), 10);
parseInt(“7em”,10)将始终返回7,是。parseInt()返回字符串中的第一个值

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

而且,您是否应该使用jQuery? 在这个问题上,它不会对您的计算或解析有多大帮助,但是可以肯定的是,您的其他代码可能会更容易、更好


始终包含基数!你只需要做一次类似于
parseInt('08')
的事情,就永远不会忘记基数。这实际上是最近在Chrome上发生的变化——他们去掉了gotcha,在em上做得很好。谢谢,回答得好(使用规范中最具体的片段)!