2011年5月27日金曜日

なんでjavascript:voidにvoidが必要なのか

ブックマークレットなどでjavascript:void 内容という感じでvoidが入ってる理由を考えたことなかったというか、Bookmarklet BuilderHatena::Letなどを使ってたり、普段の癖から無名関数で囲って書いてたりしてたので素でvoidと書いた記憶がなかった。

javascript:(function(){/*内容*/})();

The void operator in JavaScript という記事を見て、初めてvoidという存在がブックマークレットでどういう機能をしているかと言うことに気づいた。

void expr;// undefined

というようにvoid演算子で評価した式はundefinedを返す。
そのため、voidなしでブックマークレットを書いた場合は式の返り値がページのコンテンツに入れ替わってしまって、真っ白なページが表示されたりする。

javascript:window.open("http://efcl.info/");//[object Window]
上の例だと、別(タブ|ウィンドウ)でURLは開くけど、元のページは[object Window]などと表示される。
そこで、voidを使えば元のページには影響なしで、式の評価だけをすることができる訳だ。
javascript:void window.open("http://efcl.info/");// undefined

それだけなんだけど、へーと思った。

ブックマークレット書いたときはHatena::Letに置いておくと便利です。
(よくブックマークレットは出典不明になりがちなので)

0 コメント:

コメントを投稿