小编典典

parseInt vs unary plus,什么时候用哪个?

all

这条线有什么区别:

var a = parseInt("1", 10); // a === 1

这条线

var a = +"1"; // a === 1

这个jsperf 测试表明,一元运算符在当前的 chrome
版本中要快得多,假设它是针对 node.js 的!?

如果我尝试转换不是数字的字符串都返回NaN

var b = parseInt("test" 10); // b === NaN
var b = +"test"; // b === NaN

那么我什么时候应该更喜欢使用parseInt一元加号(尤其是在 node.js 中)???

编辑 :双波浪号运算符有什么区别~~


阅读 66

收藏
2022-07-18

共1个答案

小编典典

好吧,这里有一些我知道的区别:

  • 一个空字符串""计算为 a 0,而parseInt将其计算为NaN。IMO,空白字符串应该是NaN.

      +'' === 0;              //true
    

    isNaN(parseInt(‘’,10)); //true

  • 一元的+行为更像是parseFloat因为它也接受小数。

parseInt另一方面,当它看到非数字字符时停止解析,例如打算作为小数点的句点.

      +'2.3' === 2.3;           //true
  parseInt('2.3',10) === 2; //true
  • parseInt从左到右parseFloat解析和构建字符串。如果他们看到无效字符,则返回已被解析的内容(如果有)为数字,如果没有被解析为数字。 __NaN

+另一方面,NaN如果整个字符串不可转换为数字,则一元将返回。

      parseInt('2a',10) === 2; //true
  parseFloat('2a') === 2;  //true
  isNaN(+'2a');            //true
  • 正如@Alex K.parseInt的评论中所见,parseFloat将按字符解析。这意味着十六进制和指数符号将失败,因为xe被视为非数字组件(至少在 base10 上)。

一元+会正确转换它们。

      parseInt('2e3',10) === 2;  //true. This is supposed to be 2000
  +'2e3' === 2000;           //true. This one's correct.

  parseInt("0xf", 10) === 0; //true. This is supposed to be 15
  +'0xf' === 15;             //true. This one's correct.
2022-07-18