一部のオープン ソース JavaScript プロジェクトでは、変数が関数であるかどうかを でチェックしている人を見ました('function' === typeof x)
。なぜ人々は の代わりにそれを使うのだろうか(typeof x === 'function')
。
後者の方が自然だと思います。最初の方法を使用する正当な理由はありますか? パフォーマンス?エラーの可能性?それとも単にスタイルの問題ですか?
一部のオープン ソース JavaScript プロジェクトでは、変数が関数であるかどうかを でチェックしている人を見ました('function' === typeof x)
。なぜ人々は の代わりにそれを使うのだろうか(typeof x === 'function')
。
後者の方が自然だと思います。最初の方法を使用する正当な理由はありますか? パフォーマンス?エラーの可能性?それとも単にスタイルの問題ですか?
これらは「ヨーダ条件」と呼ばれます (ヨーダのように聞こえるため)。
またはの代わりに を誤って使用するInvalid left-hand side in assignment
とエラーがスローされるため、これらを好む人もいます。最も一般的な順序 (つまり、サイレント割り当てが発生し、プログラム ロジックが台無しになります。=
==
===
if(count = 5)
'function' === typeof x
は良い例ではないことに注意してください。はtypeof x
文字列として評価されるため、代入演算子の配置を間違えると、オペランドの順序に関係なく、常にエラーがスローされます。
それらは同一の表現です。==
またはと比較する場合===
、式のどちら側に何があるかは関係ありません。
if(null === myVar)
if('hello' === str)
などはすべて有効です。
2 つの式のうちの 1 つが非常に長い場合は、何が比較されているかを目で簡単に確認できるように、右側に配置することをお勧めします。
おそらく理由はありませんが、歴史的に = と == の違いに由来する可能性があります。で物を見る
if (a = 5)
と
if (5 = a)
最初のものはaが 5 かどうかをチェックせず、 5 をaに割り当てます。そのため、 5などに割り当てることができないため、コンパイルエラーをスローするリバースチェックを思いついた. したがって、一貫性の目的でもある可能性があります。
それらは同一です。一部の Java プログラマーは、Java での通常のベスト プラクティスとしてnull != object.getSomething()
、object.getSomeThing() != null
. これは、可能なNullPointerを回避するためのものです。
しかし、Javascript ではこれは意味がありません。そして、あなたが指摘し (typeof x === 'function')
たように、自然な方法です。