76

voidコードで演算子を使用している人を見てきました。私はhref属性でもこれを見てきjavascript:void(0)ました:javascript:;

voidでは、演算子を使用する正当な理由は何でしょうか?

4

4 に答える 4

61

リンクでの使用の説明:

これが、ブックマークレットが void() または何も返さない無名関数内にコードをラップして、ブラウザがブックマークレットの実行結果を表示しようとするのを阻止することが多い理由です。例えば:

javascript:void(window.open("dom_spy.html"))

何かを返すコード (この場合は新しいウィンドウ インスタンス) を直接使用すると、ブラウザーは最終的に次のように表示します。

javascript:window.open("dom_spy.html");

Firefox では、上記が表示されます。

[object Window]
于 2009-03-20T16:43:48.193 に答える
13

次の点を考慮してください。

<a href="javascript:void(fish=document.getElementById('foo').value);void(document.getElementById('bar').value=fish);">With Void</a>

<a href="javascript:fish=document.getElementById('foo').value;document.getElementById('bar').value=fish;">Without Void</a>

<input type="text" id="foo" value="one fish" />
<input type="text" id="bar" value="no fish" />

最初のリンクは、テキスト フィールドの値を交換します。2 番目のリンクは、"one fish" というテキストを含む新しいページを開きます。を使用すると、式がorjavascript: link以外の何かを返した瞬間に、ブラウザはそれをリンクがすべきこととして解釈します。すべての式/ステートメントを関数でラップすることにより、コードのスニペット全体が確実に実行されます。最近では、これは主にブックマークレットで使用されます。属性を使用するか、個別の Javascript ブロック/ファイルでイベント ハンドラーを設定することが「標準」です。nullundefinedvoid()onclick

javascript:vs.に関してjavascript:void()は、最初のステートメントがあいまいです。あなたは「ねえ、私はいくつかの JavaScript を実行したい」と言っていますが、コードを提供していません。ここでブラウザが何をすべきかは必ずしも明確ではありません。2 番目のステートメントでは、「ねえ、JavaScript を実行してください」と言っていますが、コードは最終的に undefined を返します。これはブラウザーが「何もしない」ことを意味することを認識しています。

私がここにいるので、マークアップを気にするほとんどの人にとってjavascript:orの使用javascript:void();が好まれなくなっていることも指摘しておきます。より良い方法は、onclick ハンドラーが false を返すようにし、javascript を無効にしているユーザーや NoScript などの JavaScript ブロッカーを使用しているユーザーにとって意味のあるページ/リソースを指すリンクを設定することです。

于 2009-03-20T16:54:37.933 に答える