2011-11-09 15 views
2

最近、parseIntの代わりにビット演算子を使い始めました。parseIntの代わりにビット演算子を使用しないのが良い理由はありますか?

> 70.5|0 
70 
> "70.5"|0 
70 
> 0xFF|0 
255 
> "0xFF"|0 
255 

すべてを整数に変換します。これには時には有用な副作用があります。

> 1+undefined|0 
1 
> 1+parseInt(undefined) 
NaN 

これはできません。

> "16px"|0 
0 
> parseInt("16px",10) 
16 

他の演算子と同じ効果があります。

> 70.5^0 
70 
> ~~70.5 
70 
> 70.5<<0 
70 

parseInt IMOの短い表記です。

+5

'parseInt'を使うのは明らかです。そうしないと、トリックが何をしているのかを説明するためのコメントを書き終えることになるので、誰もそれを構文エラーと混同することはありません。 – Marcelo

+3

intをパースするのはとてもいい、短く、あまり明白ではありません。それが意味をなさない場合でも他のものを0に変換する:あなたが有用であると説明する副作用(未定義で使用される場合)は、私が「望ましくない」と言う副作用です。あなたはちょうど実際に0が元々解析された?見つけにくいバグを紹介する良い方法です。 – nnnnnn

+0

追加するもう1つの注記。ビット単位のORを使用すると、32ビットを超える数は完全に異なったものになります。例: '50000000000 | 0; // -1539607552'を返します。 –

答えて

0

文字列を数字に簡単に変換する場合は、単項「+」を使用できます。メンテナンス性に問題がある場合は、Number(x)がより明確になります。

アルファベットのサフィックスが付いている数字の場合、parseIntはかなり便利ですが、基数を省略して読みにくい場合は問題があります。

簡単な切り捨てが必要とされ

と速度の問題、ビット演算子は素晴らしいですが、それがやや難読化され、Math.floor().round()または.ceil()が遅く(多分)明確しかしあります。

これらのすべてに奇妙な点がありますので、それぞれの場合に最適なものを使用してください。

関連する問題