30
32

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2013-05-12

ご存知の通り、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を使うなりして、厳密等価演算子を書くクセを付けたほうが良いと思います。

30
32
5

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
30
32

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?