読者です 読者をやめる 読者になる 読者になる

JavaScriptにおけるvoid演算子とはいったい何のために存在するのか

JavaScript

JavaScriptにはvoid演算子なるものがあり、その動作は何をしてもundefinedを返すというもの。

void 0 // # => undefined

ECMAScript 5の11.4.2 The void Operatorによれば、void演算子は次のように評価される。

  1. void exprとする
  2. exprを評価する
  3. undefinedを返す

exprをわざわざ一回評価している分だけ、単純にundefinedを返すよりも遅くなる。exprを評価し、かつundefinedを渡したい場面があったとしても、2文に分けて記述すればいいだけのように感じる。一体何が嬉しいのか。
考えられる嬉しさは2つある。
1つ目がJavaScriptのコードを圧縮する際にundefinedの代わりにvoid 0と書くことで3Byte節約することができる。それに上記のように、2文に分けて記述する場合と比較すると、少なくともセミコロン1つ、void+スペースとundefinedの差を合わせて5Byteほど圧縮になる。Googleレベルならいざしらず、一般のWebサイトを構築する際に使うことは絶対にないテクニックだろう。
もう1つは、実行はしたいが、値を返したくない場合だ。例えばaタグのonclickイベントを抑制するのに、return falseをするが、何かしらの関数を実行したいだけなら、次のように書くことができる。

<a onclick="hoge(); return undefined;">hoge</a>
<a onclick="return void hoge();">hoge</a>

どちらにせよ、滅多に使うことがなさそうな演算子だ。
追記
コメントによると、undefined を上書きされてても void 0 はプリミティブ値の undefined を返すらしい。
undefined が上書き可能なのは知っていたけど、こんな回避方法があるとは知らなかった。
情報ありがとうございます! > id:kitokitoki さん