/ 最近 .rdf 追記 編集 設定 本棚

脳log[20140403]



2014年04月03日 (木) [javascript]「JavaScriptの動かないコード (初級編) DOM要素の配列を,forループで順番に全削除できない - 主に言語とシステム開発に関して」■次の部分は完全に蛇足。「この現象は,Arrayのsplice()では発生しない。普通の配列であれば,splice()で指定したインデックスの要素を削除しても,要素はundefinedになるだけ。だから,消えた分の項目に後ろがずれこむ事はない。下記のコードは安全に動作する。」■1.spliceメソッドの必須引数は2つである。2.2番目の引数(deleteCount)が省略されたとき、Firefoxは deleteCountがとりうる最大の値であったとし、JScriptはとりうる最小の値であったとする。というわけで、例示されたコードを Firefoxで実行するとループの初回ですべての要素を削除している。IEで実行するとひとつの要素も削除されない。3.spliceは削除した後ろの要素を前に詰める。■spliceメソッドと書かれてる部分を delete演算子に置き換えると、書いてある内容は正しい。■1.getElementsByTagNameで得られるものは Arrayではなく liveな NodeListである(arrという名前の変数で受け取るのは感心しない)。2.関係が見えにくいが、removeChildが NodeList.lengthを変更している。3.それは Array.spliceで Array.lengthが変化するのと同じ構図。という線で書き直したら?■Arrayのメソッドはすべて与えられたインデックスと lengthプロパティの値に基づく操作。規格の擬似コードが長いので読んでないけど、spliceもある範囲のインデックスに作用するメソッド。2番目の引数は deleteCountという便宜上の名前がついているが、その解釈は、1番目の引数 startから start+deleteCount-1までの添え字(と、あればそれをキーとする値)が操作の対象になるということ。