テストスイートのanimate-dom-01-f.svgについて
現在配布しているテストスイートで奇妙なコード
現在配布しているテストスイート (2012-09-27版)について、奇妙なコードを見つけました。
animate-dom-01-f.svgという題名のテストで、以下のスクリプトのコードが書かれていました。
var i, ids = 'a1 a2 a3 a4 a5 a6 r1 r2 r3 r4 r5 r6 r7 r8'.split(' '); for (i in ids) { this[ ids[i] ] = document.getElementById(ids[i]); }
inを使うと、すべてのプロパティを調べるはずなので、配列のlengthプロパティやメソッドもgetElementByIdメソッドの引数になってしまいます。
たとえば、document.getElementById([].slice); というようなコードを入力してしまうのです。
Opera12.14の開発者用ツールで調べてみたところ、引数が関数オブジェクトの場合、nullを返すようになっています。どうやら、自動で、文字列型に変換しているようです。
getElementByIdメソッドの挙動
他のブラウザでは、DOMのgetElementByIdメソッドの挙動がどうなっているのか、調べてみる必要がありそうです。
もし、文字列に変換するのが一般的な場合は、前回のgetAttributeNSメソッドのときと同じように、文字列に変換するように修正します。