2

一部のオープン ソース JavaScript プロジェクトでは、変数が関数であるかどうかを でチェックしている人を見ました('function' === typeof x)。なぜ人々は の代わりにそれを使うのだろうか(typeof x === 'function')

後者の方が自然だと思います。最初の方法を使用する正当な理由はありますか? パフォーマンス?エラーの可能性?それとも単にスタイルの問題ですか?

4

4 に答える 4

12

これらは「ヨーダ条件」と呼ばれます (ヨーダのように聞こえるため)。

ヨーダ

またはの代わりに を誤って使用するInvalid left-hand side in assignmentとエラーがスローされるため、これらを好む人もいます。最も一般的な順序 (つまり、サイレント割り当てが発生し、プログラム ロジックが台無しになります。======if(count = 5)

'function' === typeof xは良い例ではないことに注意してください。はtypeof x文字列として評価されるため、代入演算子の配置を間違えると、オペランドの順序に関係なく、常にエラーがスローされます。

于 2013-02-26T16:46:45.550 に答える
7

それらは同一の表現です。==またはと比較する場合===、式のどちら側に何があるかは関係ありません。

if(null === myVar)

if('hello' === str)

などはすべて有効です。

2 つの式のうちの 1 つが非常に長い場合は、何が比較されているかを目で簡単に確認できるように、右側に配置することをお勧めします。

于 2013-02-26T16:41:09.933 に答える
2

おそらく理由はありませんが、歴史的に = と == の違いに由来する可能性があります。で物を見る

if (a = 5)

if (5 = a)

最初のものはaが 5 かどうかをチェックせず、 5 をaに割り当てます。そのため、 5などに割り当てることができないため、コンパイルエラーをスローするリバースチェックを思いついた. したがって、一貫性の目的でもある可能性があります。

于 2013-02-26T16:46:26.807 に答える
0

それらは同一です。一部の Java プログラマーは、Java での通常のベスト プラクティスとしてnull != object.getSomething()object.getSomeThing() != null. これは、可能なNullPointerを回避するためのものです。

しかし、Javascript ではこれは意味がありません。そして、あなたが指摘し (typeof x === 'function')たように、自然な方法です。

于 2013-02-26T16:45:20.973 に答える