2011-12-04 12 views
2

数値の場合、の代わりに+"10"を使用すると、チャンクが高速になります。文字列からブール値に対してこれを行う方法はありますか?文字列変換からのブール値の高速化

+8

'ブール( "偽")'ところで、 'true'をです。 –

+0

@FelixLo​​etherそれは確かに私の部分の監視だった。 +1 – Jacksonkr

答えて

5

正規表現を使用するように愚かです。あなたが本当に文字列のみ'true'を一致させたいと大文字小文字の区別を気にしない場合は、単にその文字列と比較:

function parseBoolean(s) 
{ 
    return s === 'true'; 
} 

私は本当にあなたと「空白を埋める」プレーするつもりだった場合、私は、仮定私は答えるだろう:

+"10" is to Number("10") as !!"true" is to Boolean("true") 

xがfalsy値、つまり、x ∊ {null, undefined, false, 0, ''}ときBoolean(x)だけfalseを返すからです。

+1

これは確かに最速の解決策です:http://jsperf.com/string-to-boolean – biziclop

+0

関数呼び出しのオーバーヘッドが無視できないので、関数に 's === 'true'を追加しました。http:///jsperf.com/string-to-boolean/2。興味深いことに、私のマシンでは、Object Mapアプローチが最も速かった。 –

+0

@MДΓΓLLLL私はおそらくあなたのjsperfからのbiziclops回答のバリエーションを使用して終了します。 +1 – Jacksonkr

1

単語trueのすべてのケースバリアントをマッチングが必要条件であるならば、私は正規表現を使用すると、例えば、最速であると考えている:

/^true$/i.match(input) 
+0

大文字と小文字を区別しない場合は、これはすばやくです。 –

1

一部それほど良くないと悪の解決策は:

window.toBool = {'false':false,'true':true}; 
toBool['false'] === false 

eval('false') === false // don't ever do this! 

JSON.parse('false') 
+0

'toBool [42]'が 'undefined'なので、最初の1つのdeffoはあまり良くありません。 –

+1

これは負の例です:) – biziclop

+0

@biziclopあなたは確かにtoBoolのアイデアを持っていました。私はあなたにポイントを送ってきたでしょうが、 'window'の前置詞は、私が最近読んだベストプラクティスとあまりうまく座りません。 +1 – Jacksonkr

関連する問題