Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/452.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在JavaScript中推广字符串到int的转换技术_Javascript_String Parsing_Base N - Fatal编程技术网

在JavaScript中推广字符串到int的转换技术

在JavaScript中推广字符串到int的转换技术,javascript,string-parsing,base-n,Javascript,String Parsing,Base N,我正在寻找一种更快的parseInt() 我最近发现了一种在JavaScript中将以10为基数的数字字符串转换为int的技术: var x = "1234567890" - 0 ; 当然,这仅限于基数10。我想知道是否有任何方法可以将其推广到任何基础,同时保持效率。谢谢 有些相关,但与问题不直接相关: 我运行了一个小测试,将其性能与内置的parseInt()函数进行比较。-0方法的速度是15~16倍 编辑: 这是我正在使用的基准测试代码,下面是控制台输出。显然,“1234”+0是最快的

我正在寻找一种更快的
parseInt()


我最近发现了一种在JavaScript中将以10为基数的数字字符串转换为int的技术:

var x = "1234567890" - 0 ;

当然,这仅限于基数10。我想知道是否有任何方法可以将其推广到任何基础,同时保持效率。谢谢

有些相关,但与问题不直接相关: 我运行了一个小测试,将其性能与内置的
parseInt()
函数进行比较。-0方法的速度是15~16倍


编辑:

这是我正在使用的基准测试代码,下面是控制台输出。显然,“1234”+0是最快的

var n = 1000000 ;
var x;

//parseInt with radix 10
t0 = Date.now(); console.log(t0);
for(i=0; i<n; i++) {
    x = parseInt("1234567890", 10) ;
}
t1 = Date.now(); console.log(t1);

console.log(t1-t0);


//parseInt without specifying the radix
t0 = Date.now(); console.log(t0);
for(i=0; i<n; i++) {
    x = parseInt("1234567890") ;
}
t1 = Date.now(); console.log(t1);

console.log(t1-t0);


//using - 0 to convert string to int
t0 = Date.now(); console.log(t0);
for(i=0; i<n; i++) {
    x = "1234567890" - 0 ;
}
t1 = Date.now(); console.log(t1);

console.log(t1-t0);

//using =+ to convert string to int
t0 = Date.now(); console.log(t0);
for(i=0; i<n; i++) {
    x = +"1234567890" ;
}
t1 = Date.now(); console.log(t1);

console.log(t1-t0);

如果您正在寻找通用解决方案,您将希望使用:

请注意,尽管基数参数是可选的,但最好始终包含它,即:

parseInt("09"); // may fail
parseInt("09", 10); // always 9
如果您只寻找base-10和base-16转换:

+"1234" // 1234
+"0xf" // 15

var x=+“1234567890”更容易imho.nice,迫不及待地要对其进行基准测试。谢谢@Jack“当然,这只限于10号基数”。不确定这是不是真的。我尝试了“0xF”-0,结果返回15@SajithNair十六进制的情况是唯一一个这样做的情况。您希望“任何基的通用解决方案”在传递基的地方不使用
parseInt()
?对您可能要查找的内容感到困惑?虽然在ES5中默认为以10为基数,但在这方面,大多数实现仍然使用ES ed 3,并且
parseInt('09')
给出
0
,因此始终包含一个基数:
parseInt('09',10)
@Jack,实际上我正在寻找一个更快的(如果可能的话)
parseInt()
的替代方法。看到我文章的最后两行,我提到了
parseInt()
@Raiyan Decimal或hexadecimal是唯一更快的风格:)@Jack,我同意(直到被证明是错误的)dec和hex是这种类型强制唯一有效的。但不确定+1234是否真的比“1234”+0快。请参阅我发布(编辑)的基准测试代码和控制台输出。@Raiyan我建议您使用基准测试,不要自己制作。
parseInt("09"); // may fail
parseInt("09", 10); // always 9
+"1234" // 1234
+"0xf" // 15