javascript:void(0)とは?void演算子の使い方と注意点 

はじめに 

システム部の李です。 

今回は、時々目にする javascript:void(0) をきっかけに、 void 演算子について紹介したいと思います。 

voidとは 

英単語としてのvoidには「空」という意味があります。そのため、「空の値を返す」記号として、さまざまなプログラミング言語で使用されています。 

JavaScriptでも同様に、 void の後ろに式を置くことで、例えば void 0 のように記述すると、戻り値として undefined を返します。式の範囲を明確にしたい場合は括弧を追加することも可能で、例えば void(0) のように記述すると良いでしょう。 

なぜvoid(0)なのか 

void(1) はどうなりますか?」と思う方もいるかもしれませんが、その答えは「 void(0) と同じで、 undefined です」。 

実際、 void()void('hello')void(void(0)) などもすべて戻り値は undefined となります。 void の戻り値は、常に undefined です。 

では、なぜ0がよく使われるのでしょうか?それは、シンプルさと明確さのための慣例に過ぎません。他の値が機能しないわけではなく、技術的にはどんな値でも void と組み合わせることで、同じく undefined を得ることになります。 

undefinedの歴史 

「直接 undefined を書いた場合、どうなるのか?」と思う方もいるかもしれません。その答えは、「2024年の現時点では、確かに直接 undefined を書くことができます」。 

過去には、 undefined が予約語ではない時期がありました。そのため、 undefined を再定義でき、以下のコードを実行するとコンソールに「1」が出力されていました。 

var undefined = 1;
console.log(undefined); 

現在の主流ブラウザは、ECMAScript 5(JavaScript 1.8.5)以降をサポートしており、 undefined はプリミティブ値として再定義できない仕様となっています。そのため、現在は直接 undefined を書いて使用できます。 

これが、 void(0) が徐々に使われなくなっている理由の一つです。ただし、 void の用途は void(0) だけにとどまりません。 

voidとJavaScript URI

タイトルにもある通り、 void(0) が使用される場面の多くは、 javascript: と組み合わせた <a href="javascript:void(0);"> の形です。これは、HTMLの文脈において、ブラウザが javascript: というURI(統一リソース識別子)を認識し、その後の内容がJavaScriptコードであることを理解するためです。 

この仕組みを利用すると、HTML内に簡単にJavaScriptコードを挿入することが可能です。例えば、以下の <a> タグをクリックすると、コンソールに「これはaタグです。」と出力されます。 

<a href="javascript:console.log('これはaタグです。');">  
  aタグ  
</a>

また、他のJavaScriptファイルで定義された関数を呼び出すこともできます。関数の実行だけが必要で、その戻り値が不要な場合には void が活躍します。これは、 void 演算子の特性として、戻り値が常に undefined であることに加え、渡された式が確実に実行される点によるものです。 

<a href="javascript:void(doSomethingAndReturn());">  
  関数の実行がほしくて、戻り値がいらない 
</a>

ただし、このように便利ではありますが、モダンな開発のベストプラクティスの観点から見ると、 javascript: の使用にはセキュリティリスクやアクセシビリティ上の問題があります。そのため、代わりにクリックイベントハンドラーを使用することが推奨されています。 

voidとIIFE

最後に、void 演算子のもう一つの使い方について簡単に触れたいと思います。それは、IIFE(即時実行関数式)の定義での使用です。 

通常、IIFEは関数宣言として解釈されないよう、以下のように括弧で囲むのが一般的です。

(function () { 
  console.log("IIFEです。"); 
})(); 

ここで、 void を使用することもあります。この場合、関数式の戻り値が破棄されることを明確に示すことができます。 

void function () { 
  console.log("IIFEです。"); 
}(); 

ただし、注意点として、functionキーワードではなく、アロー関数を使用したIIFEには void を適用することはできません。 

まとめ 

undefined がプリミティブ値としてキーワードに予約され、またJavaScript URIの使用が非推奨とされる意識が広まるにつれて、 void の使用は徐々に減少していくのではないかと思います。しかし、関数の戻り値が利用されないことを明示的に伝えたい場合には、 void は非常に適した選択肢です。 

これからも時折目にする機会があると思いますので、この機会にぜひ void の動作について覚えておいてください。 

最後までお読みいただき、ありがとうございます!この文章を通じて、 void についての理解を少しでも深めていただけたなら幸いです。 

弊社ではWeb開発案件も承っております。ご興味がございましたら、ぜひお問い合わせフォームよりお気軽にご相談ください。 

参考資料: 

  1. void operator: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/void 
  1. Why does void in Javascript require an argument?: https://stackoverflow.com/questions/19367589/why-does-void-in-javascript-require-an-argument/19367635#19367635  
  1. undefined: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/undefined#description 
  1. Should I use `void 0` or `undefined` in JavaScript: https://stackoverflow.com/questions/19369023/should-i-use-void-0-or-undefined-in-javascript