IT戦記 このページをアンテナに追加 RSSフィード Twitter

2007-01-15

こんなに JavaScript やってるのに知らなかった基本文法「if in」

ifin なんてあったのね。。。

知らなかった!

使い分け

3番めが if in

オブジェクトが真か偽か
if (obj.property) {
    // ...
}
オブジェクトプロパティがあるかは置いといて undefined ではないことを確かめる
if (typeof obj.property == 'undefined') {
    // ...
}
オブジェクトプロパティがあるか。
if ('property' in obj) {
    // ...
}
オブジェクト自体(プロトタイプを含まない)にプロパティがあるか
if (obj.hasOwnProperty('property')) {
    // ...
}

まとめ

いっぱいあるなあ。

大抵、一番上のでいいがいろいろ細かい条件があるとたまにどれも必要になるときがある。

いままでは、if in を知らなかったので困ったこともあったなあ。

Firefox の JavaScript はいつのまにかプロパティの順番が変わることがある

ちょっとした発見があった

Firebug のコンソール(F12で開く)で要素のプロトタイプfor in してみると

// 要 Firebug
for (var n in HTMLDivElement.prototype) console.log(n);
style
className
id
getAttribute
 :
 :

プロパティの並び順がサイトによって全然違うことに気が付いた

いろいろ試してみた

どうやら、よく使われるプロパティが上にくるようだ。高速化のためだと思う

その並び替えのアルゴリズムはよく分からないが、一回参照しただけで順番が変わる場合もあれば、何回参照しても順番が変わらない場合もあった。