5

私が理解しているように、未定義の変数をチェックする好ましい方法はtypeof a === 'undefined'.

しかし、なぜそれが良いのtypeof a == 'undefined'でしょうか? どのような場所で失敗する可能性がありますか?

4

4 に答える 4

10

この場合、 sincetypeofは常に次の文字列を返します: 良くはありません (悪くもありません)。実質的な違いはありません。

一般に、===型を明示する必要があり、JavaScript の型解決規則が直感的でない場合に予期しない結果が得られないようにするため、使用が推奨されます。

于 2013-04-22T11:16:11.900 に答える
5

との違いは==、が変換===を実行することです。==したがって、たとえば 1 は==to になりますが、 to'1'ではありません。チェックするときにそのアプローチが好まれる理由は、JavaScript には既知の比較の落とし穴があるためです。==='1'undefined

最も一般的な:

''        ==   '0'           //false
0         ==   ''            //true
0         ==   '0'           //true
false     ==   'false'       //false
false     ==   '0'           //true
false     ==   undefined     //false
false     ==   null          //false
null      ==   undefined     //true
" \t\r\n" ==   0             //true

そのため、見つけにくいバグにつながる可能性が===ある問題を回避しています。null == undefinedそのため、==代わりに を使用する必要があり===ます。===バックグラウンドで変換を実行していないため、操作も高速です。

この特定のケースでは、効果的に違いはありません。使用してtypeof a == 'undefined'typeof a === 'undefined'出力も同じで、バグはありません。これtypeofは、文字列を返すためです。ただし、操作は高速になるため、パフォーマンスの向上はほとんどありません。

于 2013-04-22T11:21:01.737 に答える
3

は文字列のみを返すためtypeof、2 つの文字列を で比較しても安全==です。

于 2013-04-22T11:16:44.437 に答える