JavaScript
jQuery
ECMAScript

jQueryで知るJavaScriptで唯一許される等価演算子の使い方

More than 5 years have passed since last update.

ご存知の通り、JavaScriptには等価演算子(==)と厳密等価演算子(===)が存在します。

JavaScript The Good Partsなどで言及されてたり、JSLintJSHintなどの静的コードチェッカーで怒られてしまったりするようにJavaScriptの場合は勝手に型を変換してしまい、意図しない結果が返ってきたり、そもそも型変換のコストがかかるために基本的には厳密等価演算子を使用して比較することが良いとされていますね。

しかし、jQueryのJavaScript Style Guideというcontributor向けのガイドラインの Equality の部分に以下のような記述があります。


Strict equality checks (===) should be used in favor of ==. The only exception is when checking for undefined and null by way of null.


下のコードのようにundefinednullをどちらもチェックする場合にのみ==を使用していいというルールになっています。

// Check for both undefined and null values, for some important reason.

undefOrNull == null;

実際にjQueryのコードを見てもこんな感じに使われています

undefinednullはもちろん別物なのに、何で上記のようなコードでどちらも判別されるの?と思いますがこれは「仕様です」としか言えないシロモノです。

ECMAScriptの11.9.3の項目を見てみると以下のような仕様であることが分かります。

// 以下の場合にtrueを返す

null == null
undefined == undefined
null == undefined
undefined == null

上記の仕様でいうと比較するものとしてはundefinedでもnullでもどっちでも良いように思いますが、実際のところundefinedというキーワードは予約語ではないので、もしかしたらどこかで書き変えられてる可能性もあるので、予約語であるnullを使って比較してる形です。

ということで、undefinednullどちらでも良いけど、ちゃんと値が入ってるかをチェックしたい場合にのみ等価演算子を使用すると記述が簡単になりますね。

他のケースではCoffeeScriptなどを使うなり、JSLintやJSHintを使うなりして、厳密等価演算子を書くクセを付けたほうが良いと思います。