parseInt替代方案

shf*_*hfx 10 javascript mysql ajax

首先 - 我的描述;)

我从服务器获得了一个XmlHttpRequests JSON响应.MySQL驱动程序将所有数据输出为字符串,PHP按原样返回,因此任何整数都以字符串形式返回,因此:

JS中的parseInt()函数是否有任何快速替代(hack)可以解析纯数字字符串,例如

var foo = {"bar": "123"};
...
foo.bar = parseInt(foo.bar); // (int) 123
Run Code Online (Sandbox Code Playgroud)

Ais*_*ina 38

要转换为整数,只需使用一元+运算符,它应该是最快的方法:

var int = +string;
Run Code Online (Sandbox Code Playgroud)

转换为其他类型可以以类似的方式完成:

var string = otherType + "";
var bool = !!anything;
Run Code Online (Sandbox Code Playgroud)

更多信息.

  • 这不解析为int,它解析为数字.例如+"1.5"=== 1.5 (4认同)
  • 这个答案是旧的,并且不正确,这不会转换为整数 (2认同)

Chr*_*oph 12

在JavaScript类型转换是通过内置类型的构造函数完成new,即

foo.bar = Number(foo.bar);
Run Code Online (Sandbox Code Playgroud)

parseInt()在几个方面有所不同:

  • 前导零不会触发八进制模式
  • 浮点值也将被解析
  • 解析整个字符串,即如果它包含其他非数字字符,则返回值为 NaN


Dan*_*uce 8

首先,您是否真的记录它很慢并且导致问题?否则,我不会费心寻找解决方案,因为确实没有问题.

其次,我猜想由于parseInt是一个原生的JS方法,它将以非常快的方式实现,并且可能以VM的本机语言(可能是C,取决于浏览器/ VM)实现.我认为用纯JS制作更快的方法可能会遇到一些麻烦.=)

当然,我不是JS大师,所以我不确定,但这是我的直觉告诉我的,并且往往是"如何为libraryFunction()提供更快的替代方案的标准答案? " 的问题.

  • 你应该使用parseInt("07",10) (2认同)

Gre*_*reg 6

json_encode()它之前将它转换为PHP中的int :

$foo->bar = (int)$foo->bar;
print('var foo = ' . json_encode($foo));
Run Code Online (Sandbox Code Playgroud)

顺便说一下,当使用parseInt时,最好总是指定第二个参数,除非你真的希望字符串从0开始被解释为八进制,依此类推:

parseInt('010', 10); // 10
Run Code Online (Sandbox Code Playgroud)