在Javascript中使用(1 * x)将字符串整数转换为整数的任何缺点?

时间:2011-10-28 19:59:40

标签: javascript casting integer

如果您将变量的类型转换的不同显式方法与整数进行比较:

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'; //简单

你会看到,为什么最后一个是我的最爱。然而,我想知道,如果这种方法存在任何隐藏的问题吗?

2 个答案:

答案 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不起作用。