在JavaScript中将string转换为数字的最快方法是什么?

任何数字,都是数字。 string看起来像一个数字,它是数字。 其他的一切,都是NaN。

'a' => NaN '1' => 1 1 => 1 

据我所知,有4种方法可以做到这一点。

 Number(x); parseInt(x, 10); parseFloat(x); +x; 

通过我做的这个快速testing,它实际上取决于浏览器。

http://jsperf.com/best-of-string-to-number-conversion/2

在3种浏览器上Implicit着最快的速度,但它使代码很难阅读…所以select你喜欢的任何东西!

至less有5种方法可以做到这一点:

如果你只想转换为整数,另一种快速(和简短)的方式是双向的 (即使用两个代字符):

例如

~~x;

参考: http : //james.padolsey.com/cool-stuff/double-bitwise-not/

到目前为止我知道的将string转换为数字的5种常见方式都有其不同之处(有更多的按位运算符可以工作,但它们都会给出和~~一样的结果)。 这个JSFiddle显示了你可以在debugging控制台中得到不同的结果: http : //jsfiddle.net/TrueBlueAussie/j7x0q0e3/

 var values = ["123", undefined, "not a number", "123.45", "1234 error" ]; for (var i = 0; i < values.length; i++){ var x = values[i]; console.log(x); console.log(" Number(x) = " + Number(x)); console.log(" parseInt(x, 10) = " + parseInt(x, 10)); console.log(" parseFloat(x) = " + parseFloat(x)); console.log(" +x = " + +x); console.log(" ~~x = " + ~~x); } 

debugging控制台:

 123 Number(x) = 123 parseInt(x, 10) = 123 parseFloat(x) = 123 +x = 123 ~~x = 123 undefined Number(x) = NaN parseInt(x, 10) = NaN parseFloat(x) = NaN +x = NaN ~~x = 0 null Number(x) = 0 parseInt(x, 10) = NaN parseFloat(x) = NaN +x = 0 ~~x = 0 "not a number" Number(x) = NaN parseInt(x, 10) = NaN parseFloat(x) = NaN +x = NaN ~~x = 0 123.45 Number(x) = 123.45 parseInt(x, 10) = 123 parseFloat(x) = 123.45 +x = 123.45 ~~x = 123 1234 error Number(x) = NaN parseInt(x, 10) = 1234 parseFloat(x) = 1234 +x = NaN ~~x = 0 

在更多的情况下, ~~x版本会产生一个数字,其他的通常会导致undefined ,但是无效的input会失败(例如,如果string包含有效数字之后的非数字字符,它将返回0 )。

一些Perftesting表明,标准的parseIntparseFloat函数实际上是最快的select,据推测高度优化的浏览器,但这一切都取决于您的要求,因为所有选项都足够快 : http : //jsperf.com/best-of-string -to-数转换/ 37

这一切都取决于如何将性能testingconfiguration为一些显示parseInt / parseFloat要慢得多。

我的理论是:

  • 穿线
  • 统计
  • JSPerf结果:)

将string转换为整数的一种快速方法是使用按位或如下所示:

 x | 0 

虽然这取决于它是如何实现的,理论上它应该相对较快(至less与+x一样快),因为它会先将x成一个数字,然后执行一个非常有效率的或。

这里是简单的方法来做到这一点: var num = Number(str); 在这个例子中str是包含string的variables。 您可以testing并查看它是如何工作的: Google Chrome开发人员工具 ,然后转到控制台并粘贴以下代码。 阅读评论以更好地理解转换是如何完成的。

 // Here Im creating my variable as a string var str = "258"; // here im printing the string variable: str console.log ( str ); // here Im using typeof , this tells me that the variable str is the type: string console.log ("The variable str is type: " + typeof str); // here is where the conversion happens // Number will take the string in the parentesis and transform it to a variable num as type: number var num = Number(str); console.log ("The variable num is type: " + typeof num); 

这可能不是那么快,但有额外的好处,确保您的号码是至less一定的价值(如0),或至多一定的价值:

 Math.max(input, 0); 

如果你需要确保最低的价值,通常你会这样做

 var number = Number(input); if (number < 0) number = 0; 

Math.max(..., 0)写两个语句。

+运算符前缀string。

 console.log(+'a') // NaN console.log(+'1') // 1 console.log(+1) // 1