タツオチップス

最近は https://note.com/tatsuosakurai に書いてるかもです

#tkbjs #6 メモ

#4 は RubyKaigi の前日準備で欠席、#5 はちょっとバタバタしてたのでメモってないです。
というわけで、#6 メモ。

3.7 プロパティの列挙

for in文を利用

オブジェクトがもっているプロパティがすべてとりだせる。
ただし、プロタイプチェーン上のプロパティも取得してしまうので、typeofかhasOwnPropertyを使って取り除く

プロパティの順番を保証したいとき

for in 文ではなく、for 文を使う。正しい順序にプロパティの名前を並べた配列を用意しておいてそれを使う。(順序保証したいときってどんなときだろう?すぐ思いつかない…)

3.8 プロパティの削除

delete でプロパティを削除できる。
プロトタイプチェーン上のオブジェクトに作用することはない。
rhino だと delete 2回で Curly が消えるらしい。(プロトタイプチェーン上に存在するプロパティも消えちゃう? m92o さんが後でrhinoのバグ情報調べてみます とのこと。消えちゃまずいよねえ。。。

delete の戻り値について

1回目の delete で 'Moe' を消したときの戻り値は true
2回目の delete で プロトタイプチェーン上の 'Curly' は消えないけど、戻り値は true
false にして欲しい気もするよねえ?という話からちょっと調べる。
https://developer.mozilla.org/ja/Core_JavaScript_1.5_Guide/Operators/Special_Operators#delete

x=42
var y= 43
myobj=new Number()
myobj.h=4 // プロパティ h を作成
delete x // true を返す(暗黙的に宣言されているならば削除可能)
delete y // false を返す(var 付きで宣言されているなら削除不可能)
delete Math.PI // false を返す(定義済みプロパティは削除不可能)
delete myobj.h // true を返す(ユーザ定義プロパティは削除可能)
delete myobj // true を返す(暗黙的に宣言されているならば削除可能)

とのこと。

3.9 グローバル領域の利用を減らす

なにも考えずにグローバル変数使って、あとで泣くことになってからじゃ遅いので気をつけようね!というお話。
azu さんに教えてもらった「有名なライブラリの名前空間占有率」が(重いけど)なんかすごいなあと思った。こんな資料あるんですねえ。
http://mankz.com/code/GlobalCheck.htm

2次会(自習タイム)

@takedasoft さんが現れたw (ちなみに武田さんは僕の先生です)
(教科書持ってないって言ってたけどまた来てくれるのかな?木曜だとScala東北だったような?8時からだから平気なのかな?)

イベントハンドラの大文字小文字

ikezawa
じゃ質問です関係ない質問なんですけど getElementById は getElementByIDじゃだめなのに、onClick でも onclickでもだいじょぶなのは、なぜ? 私何か勘違いしてるでしょうか?

という質問から、イベントハンドラについてのお話に。

track8
サイ本には、「HTMLは大文字と小文字を区別しないので、属性を記述する場合は、大文字で記述しても、小文字で記述しても、大文字と小文字を混ぜて記述しても問題ないことを思い出してみてください。コレに対してJavaScriptでは、すべてのイベントハンドラプロパティは小文字で記述しなければなりません。」とありますね。

子サイ本、137p より
jsでは関数名をキャメルケースで書くのが一般的ですが、イベントハンドラについてはすべて小文字で書くようにしましょう。ウェブページをHTMLのDOCTYPEで定義している場合は、使用しているブラウザが大文字と小文字が混在した表記法を受け付けてくれる可能性もありますが、大文字と小文字が混在した方法は次のようにHTML要素の属性としてイベントハンドラを実行した場合に限り機能します。


XHTML の場合、すべての属性名は小文字でなければなりません。したがって、いつも小文字の表記を用いるのがよいでしょう。

感想

ようやく3章が終わり!7ページ進むのに6回w 3ヶ月ほどかかりました。やはりプロトタイプが手強いですねえ。ペースは遅いのですが、じっくり議論しつつ、今まで自分ではあやふやだった(ことにも気づかずにいた)ところを考えたり調べたりできるので、jsへの理解が深まっていく気がしています。この議論して調べて知識が溜まっていく感じが、とっても楽しいっす!!(あと気軽に質問できる雰囲気がいいですよねえ。その辺は vestige さんや awazeki さんとか栃木の方々の雰囲気なのかなーと思ってますw)
次回は10月14日木曜日の22時です!
http://lingr.com/room/tkbjs