您知道将字符串转换为它所代表的类型的更好更快的方法吗?
我一直在使用这个功能:
var convertType = function (value){
if (value === "undefined") return undefined;
if (value === "null") return null;
if (value === "true") return true;
if (value === "false") return false;
var v = Number (value);
return isNaN (v) ? value : v;
};
候选人:
//Me, Gabriel Llamas
var cast1 = function (value){
if (value === "undefined") return undefined;
if (value === "null") return null;
if (value === "true") return true;
if (value === "false") return false;
var v = Number (value);
return isNaN (v) ? value : v;
};
//KooiInc
var cast2 = function (value){
var v = Number (value);
return !isNaN(v) ? v :
value === "undefined" ? undefined
: value === "null" ? null
: value === "true" ? true
: value === "false" ? false
: value
};
//LightStyle
var cast3 = function (value){
try {
return (new Function("return " + value + ";"))();
} catch(e) {
return value;
}
};
//Emmissary's proposal
var cast4 = function (value){
if (value === "undefined") return undefined;
try{
return JSON.parse (value);
}catch (e){
return value;
}
};
基准代码(使用speedy):
var fn = function (cast){
cast ("undefined");
cast ("null");
cast ("true");
cast ("false");
cast ("12");
cast ("12.34");
cast ("asd");
};
speedy.run ({
"cast 1": function (){
fn (cast1);
},
"cast 2": function (){
fn (cast2);
},
"cast 3": function (){
fn (cast3);
},
"cast 4": function (){
fn (cast4);
}
});
结果:
File: string-conversion.js
Node v0.10.18
V8 v3.14.5.9
Speedy v0.0.8
Benchmarks: 4
Timeout: 1000ms (1s 0ms)
Samples: 3
Total time per benchmark: ~3000ms (3s 0ms)
Total time: ~12000ms (12s 0ms)
Higher is better (ops/sec)
cast 1
6,270,458 ± 0.2%
cast 2
3,305,103 ± 0.0%
cast 3
54,952 ± 0.0%
cast 4
82,790 ± 0.4%
Elapsed time: 12109ms (12s 109ms)