3

両方を読んだ後:

「void0」と「undefined」の違いhttps://developer.mozilla.org/en-US/docs/JavaScript/Reference/Operators/void

まだいくつか質問があります。

window.undefined 上書きできることを読みました vwherevoid演算子は未定義の値を返しますalways

しかし、私の目を引いた例はMDNの例でした:

<a href="javascript:void(0);">Click here to do nothing</a>

何もしないために、私はいつも私が書くべきだと思っていました:

href="javascript:return false;"

そして、これは私を別の質問に導きます:(Href文脈で!):

javascript:void(0);vsjavascript:return false;

違いは何ですか?

また-しますか

function doWork() {
    return void( 0 );
}

正確

function doWork() {

    return undefined;
}

ありがとう。

4

2 に答える 2

6

これは正しく機能しません:

href="javascript:return false;"

あなたは機能していないからです。あなたはこれについて考えています:

onclick="return false;"

return false;関数に配置されているので、これは正しいです。このfalse値はonclick、要素のデフォルトの動作を防ぐようにに指示します。

returnステートメントが属性hrefで機能するには、完全な関数が必要です。

href="javascript:(function() { return false; })();"

しかし、それは長くて醜いものであり、コメントが指摘しているように、JavaScripthrefは一般的に推奨されていません。

編集: 私はちょうど何かを学びました。上記のように非式undefinedを使用すると、要素が戻り値に置き換えられるようです(少なくともFirefoxでは)。でJavaScriptを使用することの完全な影響については、完全には理解していhrefません。


はい、これ:

return undefined;

これとまったく同じものを返します:

return void 0;

undefined変数が他の値によって再定義またはシャドウイングされていない限り。

しかし、それらは同じものを返す可能性がありますが、同じものであると言うのは完全に正確ではありません。理由は次のとおりです。

  • undefinedデフォルト値がundefinedプリミティブであるグローバル変数です

  • voidは、オペランドの戻り値をプリミティブに置き換える単項演算子です。undefined

したがって、どちらもundefinedプリミティブになりますが、その方法は大きく異なります。

于 2012-09-27T14:14:17.053 に答える
4

属性javascript: somethingの値として指定した場合、これは誰かがそのリンクをアクティブ化したときに評価されます。hrefsomething

この評価の結果がチェックされます。文字列とtypeof評価された場合'undefined'、何も起こりません。そうでない場合は、ページに評価結果がコンテンツとして再読み込みされます。

<a href="javascript: void(0);">Nothing to see here, move along...</a>
<a href="javascript: undefined;">No, still nothing...</a>
<a href="javascript: prompt('Where would you like to go today?');">Check this out!</a>

ここでの最初の2つのリンクは、基本的に何もしません。しかし、3番目のものは非常に興味深いものです。入力したものpromptはすべて表示されます。空の文字列も表示されます。しかし、それだけではありません。クリックCancelすると、新しいページが表示されます-null印刷された状態で表示されます(キャンセルされた場合promptは戻り値が返さnullれ、おそらくご存知のとおり、typeof null実際にはobject;でありnull、文字列に変換されます'null')。

それはもっと面白くなるかもしれません:

<a href="javascript: window.undefined = 333; void(0);">What happens here?</a>
<a href="javascript: window.undefined = 333; undefined;">And here?</a>

さて、ここではまだ最初のリンクでは何も得られません。しかし、2番目のリンクはIE8で333を表示します。:)

そして、それは、あなたの2番目の質問にも答えると思います。typeofvoid(0)は常にですundefinedtypeof undefined誰かがドラゴンをに再割り当てするのが良い考えだと判断した場合、ドラゴンを与えることができますwindow.undefined。)。

...そして、はい、javascript: return false;間違っています。機能していない環境から戻ることはできません。あなたはおそらくそれをと混同しましたがonclick: return false、それは完全に別の話です。)。

于 2012-09-27T14:28:46.757 に答える