読者です 読者をやめる 読者になる 読者になる

うさがにっき

読書感想文とプログラムのこと書いてきます

JavaScript入門書を読んで気になった点 その1

概要

PolymerをやろうにもJavaScriptの理解が必要と思い入門書を読むことに
気になった点をまとめる

詳細

等価演算子(==)と同値演算子(===)

JavaScriptでは演算子オペランドがかなり融通をきかせてくれる
例えば以下の結果はすべてtrueになる

document.writeln('3.14E2' == 314)
document.writeln('0x10' == 16)
document.writeln('1' == 1)

この「融通」が邪魔な時は同値演算子(===)を使う

document.writeln('3.14E2' === 314)
document.writeln('0x10' === 16)
document.writeln('1' === 1)

今度はいずれの結果もfalseになる

delete演算子について

delete演算子は、オペランドに指定した変数や配列要素、オブジェクトのプロパティを破棄する
削除に成功した場合はtrue、失敗した場合はfalseを返す

var ary = ['JavaScript', 'Ajax', 'ASP.NET'];
document.writeln(delete ary[0]); // true
document.writeln(ary); // ,Ajax,ASP.NET

var obj = {x:1, y:2};
document.writeln(delete obj.x); // true
document.writeln(obj.x); // undefined

var obj2 = {x:obj, y:2};
document.writeln(delete obj2.y); // true
document.writeln(obj); // [object Object]

var data1 = 1;
document.writeln(delete data1); // false
document.writeln(date1) // 1

data2 = 10
document.writeln(delete data2); // true
document.writeln(data2); // エラー
  • 配列要素を削除した場合、該当する要素が削除されるだけで後ろの要素が繰り上がるわけではない
  • プロパティを削除した場合も、プロパティそのものが削除されるだけで、プロパティが参照するオブジェクトが削除されるわけではなあい
  • 明示的に宣言された変数を削除することはできない

ネスとされたループを一気に脱出する方法

脱出先のループの先頭にラベルを指定することによって多重ループを一気に脱出する

kuku :
for (var i = 1; i < 10; i++) {
  for(var j = 1; j < 10; j++) {
    var k = i * j;
    if(k > 30) {
      break kuku;
    }
  }
}

sortメソッド

これは他言語でもそうだがsortメソッドの順序は関数を引数にすることにより順序を変えられる
sortメソッドはデフォルトで数字も文字列としてsort処理を行うがこれを数値として処理したい場合には以下のようにする

var ary = [5, 25, 10];
document.writeln(ary.sort()); // 10, 25, 5(文字列としてsort)
document.writeln(ary.sort(
  function(x, y) {return x-y;}
));

Dateオブジェクトの便利な使い方

Dateオブジェクトはその月の範囲外まで加算しても空気を読んで、来月の日付を出力してくれる
その性質を利用して、今月の最終日を出すにはこうする

var dat = new Date(2010, 4, 15, 11, 40);
document.writeln(dat.toLocaleString()); // 2010/5/15 11:40
dat.setMonth(dat.getMonth() + 1); //来月
dat.setDate(0); // 0日目
document.writeln(dat.toLocaleString()); // 2010/5/31 11:40

インスタンスのオブジェクト型判定

typeof演算子は基本のデータ型の判定はできるが、基本型の判別しか識別できない
参照型に関してはtypeofはArray, Dateなどについては一様に"object"としか返さない
参照型の変数を識別するにはconstructorプロパティを使う

var data = [];
if(typeof data == 'object' && data.constructor == Array) {
}

ちなみにjavaとかと同じように

var data = [];
if(typeof data == 'object' && data instanceof == Array) {
}

も可

参考

JavaScript本格入門 ?モダンスタイルによる基礎からAjax・jQueryまで

JavaScript本格入門 ?モダンスタイルによる基礎からAjax・jQueryまで