2010/09/23

JavaScript Quiz1

JavaScriptのクイズを見つけたので、メモメモ。
その中から気に入ったのをピックップして答えと解説を書いてみました(間違ってたらすみません)。
各問題の式の評価結果を予想する問題です。

Q1.
1 && 3

A.3
&&演算子の1番目のオペランドがfalsyならその値を、そうでない(truthy)場合は2番目のオペランドを返すから。
jsでは数値は”truthy”と判定される(0はfalthyですが・・・)ので、”3”が結果として返ります。


Q2.
1 || 3

A.1
||演算子は、1番目のオペランドがtruthyの場合にその値を、そうでない(falsy)場合は、2番目の評価を返します。
”1”はtruthyなので”1”が返ります。
||演算子の実用例としては、デフォルト値を設定するときに使えます。


function moge(argv) {
this.name = argv || "shinya"
}

// 引数なし:デフォルト値"shinya"が表示
var hoge1 = new moge();
alert(hoge1.name);

// 引数あり:引数"piyo"が表示
var hoge2 = new moge("piyo");
alert(hoge2.name);



Q3.
x = {shift:[].shift};
x.shift();
x.length;


A.0
空の配列(Object型)のプロパティを拡張すると、関数として扱われるよう(例えばlengthとか)です。
配列であるオブジェクトのポインター?であるxには自動的にlengthプロパティが付加されます。
要素数が0のため、0が評価結果として返ります。


// "Object"が返る
x = {shift:[]}
typeof x;

// "function"が返る
x = {shift:[].shift}
typeof x;


続きはまた後で、よしなに。