[JavaScript]nullとundefinedとvoid演算子

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

[JavaScript]nullとundefinedとvoid演算子

JavaScriptのnullとundefinedとvoid演算子について調べたので忘れないうちにメモ。

typeof演算子

window.alert(typeof null);    /* object */

window.alert(typeof undefined);    /* undefined */

window.alert(typeof void('some value'));    /* undefined */

nullはtypeof演算子に対してobjectという文字列を返すので要注意です。うっかり、

if (typeof obj == 'object') window.alert(obj.toString());   /* Bad Code */

のようなコードを書くと、objにnullが渡されたときに、obj has no propertiesと言われて止まります。

voidは、どんな値を渡されてもundefined値を返す単項演算子です。関数ではないので、括弧は必須じゃありません。

window.alert(void 1);    /* undefined */

等価演算子・厳密等価演算子

void演算子はundefinedと同じなので省略。

window.alert(null == undefined); /* true */

window.alert(null === undefined); /* false */

nullとundefinedは、普通の等価演算子ならtrueで結ばれますが、厳密比較をするとfalseになります。なぜこういう仕様になっているのかは謎です。歴史的理由でしょうか。

基礎知識

nullはnull値を表す予約語ですが、undefinedはundefined値を保持するグローバル変数です。なので、undefinedには自由な値を代入することができます。

null = 'value';    /* Error */
undefined = true;
window.alert(undefined);    /* true */

したがって、次のように引数チェックをすると思わぬバグを招くことがあります。

function func(arg) {    /* Bad Code */
    if (arg == undefined) throw 'Invalid arguments';
    ...
}

次のようにするのが正解

if (typeof arg == 'undefined') throw 'Invalid arguments';

書き換えられたundefined変数をundefined値に復すときは↓

undefined = void 0;
スポンサーサイト

関連記事

トラックバック URL

http://liosk.blog103.fc2.com/tb.php/30-511ef302

トラックバック

[JavaScript] typeof arg == \'undefined\' っていらないんじゃね?
以前にも JavaScript の null と undefined に関する記事を書いたことがあったが、またしても性懲りもなく null と undefined の挙動につまずいて、 ECMAScript 3...
  • 2008-09-24
  • 発信元: 文系大学的IT系の悲哀

コメント

間違ってるコードは赤地にでもしとけよ 見づれぇ
  • 2013-02-26
  • by 誰か
  • id:-

コメントの投稿

お名前
コメント
編集キー
 
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。