A要素は文字列コンテキストではhrefプロパティ値で評価される

window.openの第一引数にA要素(HTMLAnchorElement)をそのまま渡しているコードを見て、動かないんじゃないかと思って試してみると問題なく動いて驚いた。どうやらHTMLAnchorElementは文字列コンテキストではhrefプロパティの値として評価される、つまりtoStringがreturn this.href;のようだ。

この挙動はECMAScript Language Bindingに書かれていた*1

HTMLAnchorElement objects in String expressions are evaluated as HTMLAnchorElement.href.

例えば、ページにある全てのリンクのリンク先URLを一覧表示するブックマークレットは、以下のようにシンプルに書ける(良い例が思いつかない)。

javascript:alert(Array.prototype.join.call(document.links,'\n'));