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 を知らなかったので困ったこともあったなあ。

nanto_vinanto_vi 2007/01/15 22:41 二項演算子inはfor-in文と同じキーワードを使ってるだけでまったくの別物なので、if文に限らず式が書ける場所ならたいていどこでも使えます。
それとはてブコメントへの返信になりますが、hasOwnPropertyもIE5/NN4では動かないし、ECMA-262 3rdより前なんて正規表現も例外処理もありません。それを差し引いてもin演算子は知っていたほうが何かと便利な仕様だと思います。
# それにしてもMSDN LibraryでJScript 2〜って書いてあったような気がするので(今見たら必要条件バージョン1となっている……) IE 4から使えるものだとばかり思ってました。実はJScript 5.5からだったんですか。
# http://msdn.microsoft.com/library/ja/script56/html/js56jsoprIn.asp

kazuhookukazuhooku 2007/01/16 01:54 > in演算子は知っていたほうが何かと便利な仕様だと思います
in 演算子が言語仕様にあってしかるべきということに異論ありません。

> MSDN LibraryでJScript 2〜って書いてあったような気がする
確かに書いてありますね。
http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Reference:Operators:Special_Operators:in_Operator を見てそう書いたのですが (ECMA-262 1st. Ed になかったのは覚えていた) 、こっちが間違っているのかもしれません。

はてなユーザーのみコメントできます。はてなへログインもしくは新規登録をおこなってください。