Why +str is a better than str*1 in JS to convert string to number?
假设我有一个字符串,它的值已经是一个数字,例如var str ="1234",现在我想把它转换成数字。
到目前为止,我在网上看到了两个窍门,
使用一元+:var num = +str
使用乘法运算符*:var num = str*1
我想知道一般来说哪个更好。
正如我在这里从接受的答案的评论中看到的:将JSON结果转换为日期,似乎最好避免使用*1。这是真的吗?背后的原因是什么?
- 对于整数,parseInt()更好
- 一元加号的定义是将一个值转换为一个数字,因此它在语义上比乘以引入另一个操作数的1更正确。@ericso-parseint()只有在您特别想忽略字符串中的任何非数字数据或小数点位值时才更好,否则它比一元加号更糟糕,因为它忽略了这些内容。
基本上更少的操作。
一元加号调用内部toNumber方法,而乘法运算符也调用toNumber方法,然后对其执行数学运算。
为什么要做额外的步骤?
http://www.ecma-international.org/ecma-262/6.0/sec一元加运算符
http://www.ecma-international.org/ecma-262/6.0/sec应用MUL运算符
- 谢谢。回答清晰明了,让我知道+一点也不刻薄,这确实是官方的意图。
- 我不会说这是"官方意图",因为有强类型语言实现一元+。但是,当使用一个称为ASM的特定javascript子集时,+被正式用于类型定义浮点数, | 0被用于类型定义32位整数。