ParseInt与一元加-何时使用哪个

ParseInt与一元加-何时使用哪个

这一行之间有什么区别:

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

这条线

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

这,这个jsperf试验显示在当前的Chrome版本中,一元操作符的速度要快得多,假设它是针对node.js的!?

如果我试图转换不是数字的字符串,则两个字符串都返回NaN:

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

那么我应该在什么时候使用parseInt超过一元加(特别是node.js)?

编辑:与双倾斜算子有什么区别?~~?


MMTTMM
浏览 429回答 3
3回答

12345678_0001

请看这个答案更完整的案例好吧,以下是我所知道的一些不同之处:空字符串""计算结果为0,同时parseInt评估为NaN..imo,空字符串应该是NaN.+'' === 0;              //trueisNaN(parseInt('',10)); //true一元+表现得更像parseFloat因为它也接受小数。parseInt另一方面,当它看到一个非数字字符时,它将停止解析,就像拟为小数点的句点一样。..+'2.3' === 2.3;           //trueparseInt('2.3',10) === 2; //trueparseInt和parseFloat解析并构建字符串。从左到右..如果他们看到一个无效字符,它将已解析的内容(如果有的话)返回为一个数字,以及NaN如果没有被解析为一个数字。一元+另一方面又会回来NaN如果整个字符串不可转换为一个数字。parseInt('2a',10) === 2; //trueparseFloat('2a') === 2;  //trueisNan(+'2a');             //true从…的评论中可以看出@Alex K., parseInt和parseFloat将按字符解析。这意味着十六进制和指数符号将失败,因为x和e被视为非数字部件(至少在基础10上)。一元+会正确地转化他们。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.

largeQ

我相信这435的答案中的表格是全面的,但我们可以用以下模式进行总结:一元加并不是对所有虚假的价值观一视同仁,但它们都是假的。一元加发送true对1,但是"true"到NaN.另一方面,parseInt对于非纯数字的字符串,则更自由。parseInt('123abc') === 123,鉴于+报告NaN.Number将接受有效的十进制数,而parseInt只要把所有的东西都降到十进制以上。因此parseInt模拟C行为,但对于评估用户输入可能并不理想。两者都在字符串中修剪空格。parseInt,设计得很差解析器,接受八进制和十六进制输入。一元加只需要十六进制。Falsy值转换为Number下面是C语言中有意义的内容:null和false都是零。""去0并不完全遵循这个惯例,但对我来说很有意义。因此,我认为如果您正在验证用户输入,一元加对于所有东西都有正确的行为,除了它可以接受小数(但在我的实际生活中,我更感兴趣的是捕捉电子邮件输入,而不是完全省略用户ID,等等),而parseInt太自由了。
打开App,查看更多内容
随时随地看视频慕课网APP