3

関数から -1 が返される状況 (例: )(!~val)では、代わりに を使用している人に出くわすことがよくあります。(val === -1)indexOf()

私には、論理 NOT + ビットごとの NOT ステートメントは、-1 比較と比較すると、恐ろしく判読できないように見えます。どちらか一方を使用することを保証するのに十分な速度の違いはありますか? または、速度ではない場合、 === の代わりにビットごとの NOT を使用できないという他の理由はありますか?

(これが重複している場合は事前にお詫びします。ただし、この正確な質問に対する答えが見つかりませんでした。「!〜」の検索は、SOまたはGoogleではうまく機能しません)

4

3 に答える 3

3

いいえ、それらは間違いなく同じではありません。

ビット単位の変換は、暗黙的な型強制を行います。=== 演算子は、型が等しいかどうかをチェックします。

したがって、これら 2 つはまったく異なる結果をもたらす可能性があります。

var val = "-1";

(!~val) // true
(val === -1)  // false

このような状況では、比較の意図と正確さは、パフォーマンスの考慮事項よりもはるかに重要だと思います。正確に何を比較するかを決定し、ジョブに適した比較を使用します。

于 2012-09-04T15:11:05.333 に答える
1

意味のあるパフォーマンスの違いですか?おそらくそうではありませんが、それは完全にVMに依存します。

http://jsperf.com/のようなものを使用していつでも見つけることができます

于 2012-09-04T15:06:54.413 に答える
0

実用になり、読みやすさを追求する

どちらもf@$# オフです。

スクリプトにパフォーマンスの問題がある場合、この boolean check に要約されることは絶対にありません。しかし、他の人が述べているように、これら 2 つは (完全に) 同じではありません。

于 2012-09-04T15:21:34.953 に答える