[JavaScript]nullとundefinedとvoid演算子
- 2007-08-20
- カテゴリ: Client Side
- タグ: JavaScript Tips
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());
のようなコードを書くと、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) {
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
1 件のトラックバック
- [JavaScript] typeof arg == \'undefined\' っていらないんじゃね?
-
以前にも JavaScript の null と undefined に関する記事を書いたことがあったが、またしても性懲りもなく null と undefined の挙動につまずいて、 ECMAScript 3...
- 2008-09-24
- 発信元: 文系大学的IT系の悲哀

