【Javascript】 in演算子
問題
inって演算子なんですか。
答え
in単体だと演算子です(for-inのはそういう”構文”)。
あまり見かけないけど、こういう書き方ができる。
Example
if ("xxx" in obj) { //obj に xxx プロパティがあるとき //... }
Example
("xxx" in obj) ? alert('obj.xxx あり') : alert('obj.xxx なし');
ただ、以下の書き方でだいたい事足りるので、あまり使われない。
if (obj.xxx) { //... }
「プロパティが存在するかどうか」と、「プロパティの値が真かどうか」という意味合いの違いはある。
/** * 準備 */ var o = {}; o.aaa = 123; o.bbb = null; o.ccc = undefined; /** * test 1 : プロパティがあって値が何か入っていれば */ ("aaa" in o) ? alert('o.aaa あり') : alert('o.aaa なし'); //ありになる if (o.aaa) { alert('o.aaa は真でした'); //ここを通る } /** * test 2 : プロパティがあるけど値がnullだと */ ("bbb" in o) ? alert('o.bbb あり') : alert('o.bbb なし'); //ありになる if (o.bbb) { alert('o.bbb は真でした'); } else { alert('o.bbb は偽でした'); //こちらを通る } /** * test 3 : プロパティがあるけど値がundefinedだと */ ("ccc" in o) ? alert('o.ccc あり') : alert('o.ccc なし'); //ありになる if (o.ccc) { alert('o.ccc は真でした'); } else { alert('o.ccc は偽でした'); //こちらを通る } /** * test 4 : プロパティがない */ ("ddd" in o) ? alert('o.ddd あり') : alert('o.ddd なし'); //これは なしになる if (o.ddd) { alert('o.ddd は真でした'); } else { alert('o.ddd は偽でした'); //もちろん こちらを通る }
プロパティをundefinedにするのではなくて、プロパティを削除する場合は、deleteを使う。
Example
delete obj.xxx;
プロパティの値の問題ではなく、プロパティの有無を見たいときは、in と delete で。
http://www.ecma-international.org/publications/standards/Ecma-262.htm
コメント