Javascriptにおける変数の扱いは非常に柔軟性が高い。というより緩い。
型も無いに等しいので緩い。関数も変数もごっちゃに混ぜて書くことが多いため、書く人がルールを持っておかないと、他の人が読む時に読みずらい&面倒くさい。
書き方バリエーションも多言語よりも幅があるので、ルール化をすると個人として作業効率が悪くなる場合もあるので、改めてかなりの独自言語であることが理解できる。
そんなjavascriptの変数宣言などで最近自分でも仕事でも書き方が変わってきたので、調査してまとめておく。
グローバル変数の代入をする時のお作法
abc = abc || {};
【解説】
グローバル変数「abc」は既に定義されている場合とそうでない場合をif分で判定して定義されていなければ空のオブジェクトを作成したい場合、分かりやすく書くと以下の様に書く。
# 一般的なif文
if(typeof abc === "undefined"){abc={}}else{abc=abc}
# 三項演算子
abc = (typeof abc !== "undefined") ? abc : {};
正直else文は書かなくてもいいので若干短くなるが、お作法文だと完結に記述できる。
javascriptに馴染みのないプログラマーには「なんじゃこりゃ」な文だが、三項演算子のようなものだと思えばさほど悪くない。
とりあえず、この文を日本語文で書いてみると
abc = abc || {};
グローバル変数abcに値を代入する時に、if(abc)というbooleanでtrueが返る場合はグローバル変数abcを代入(||の左側)、falseが返る場合は空オブジェクトの{}を代入する
【注意点】
三項演算子と似たような動作をするのですが、明確に違うのは、「abc = abc || {}」文のabc判定を行うのはあくまで右辺のabcで行い、falseの場合は{}を返すという事なので、
「abc = 10 || 20」のような書き方はできない。
三項演算子であれば
abc = (abc) ? 10 : 20
と書けるのだが、abcが左辺と右辺にあり、グローバル変数がすでに定義されているかどうかにおける登録するだけの処理しかできないのでしっかり理解する事。
【応用】
さらに、以下のような書き方もあり、これは上記の「||」と逆で左側がfalse、右革がtrueになり、さきほどの逆の結果となる。
abc = abc && {};
グローバル変数がすでに宣言されていれば空オブジェクトにする場合に使用する。
まったくどういう時にそういう場面があるのだろうか???想像できん・・・
変数のunset処理
PHPのunsetのように、一度定義した変数を定義削除する事はできるんだろうか?
調べてみると「delete」関数で簡単に削除できるようだ。
a = {};
console.log(typeof a);
delete a;
console.log(typeof a);
>"object"
>"undefined"
リファレンスページ
delete - JavaScript | MDN - Mozilla Developer Network
どうやら、決行制約がありそうなので、以下の方法で実行すると制約なしに削除できるようだ
b = {};
console.log(typeof b);
b = undefined;
console.log(typeof b);
> "object"
> "undefined"
非常にシンプルでかつ問題なさそうなので、この方式をデフォルトにした方がいいと思う。
あまり使う機会は無さそうだが、覚えておいて損はないかもね。
0 件のコメント:
コメントを投稿