如果您将变量的类型转换的不同显式方法与整数进行比较:
var y = parseInt(x,10) + 'text';
//太长了,需要包装,需要反八角黑客
var y = x.toFixed(0) + 'text';
//仍然很长,甚至更丑,也许还有错误
var y = Math.floor(x) + 'text';
// long并使用Math对象
var y = Number(x) + 'text';
//很长
var y = +x + 'text';
//非常短暂,但太过于hacky
var y = 1 * x + 'text';
//简单
你会看到,为什么最后一个是我的最爱。然而,我想知道,如果这种方法存在任何隐藏的问题吗?
答案 0 :(得分:5)
最后一个确实有效:
1 * 0.5; // 0.5
如果你想要最好的readiblilty使用parseInt。基数不是黑客!
编辑:
我的最爱:
var y = x|0 + 'text';
<小时/> 编辑:请注意这个&#34;技巧&#34;仅适用于32位有符号整数。因为JavaScript实现了它的位逻辑。因此,您可以使用的最大正数是2147483647.
有一个无符号位操作,无符号右移。 0 >>> 1
答案 1 :(得分:1)
我认为代码应该首先是正确的,然后尽可能地让尽可能多的其他人可读,最后不再需要。在这方面,这是我的偏好:
对于从字符串到整数的转换,我更喜欢:
parseInt(x, 10)
因为我认为代码确切地说明了你要做的事情。如果您不喜欢额外的参数,可以定义自己的全局效用函数:
toInt(x) {return(parseInt(x, 10));}
所以你可以使用:
toInt(x)
当我只想将字符串转换为数字时,我更喜欢:
Number(x)
因为我认为它是最明确和最易读的。
在您拥有的其他示例中,如果x是字符串并且x.toFixed(0)
,Number(x)
和+x
未转换为整数,则1*x
不起作用。