web-dev-qa-db-ja.com

Void 0はどういう意味ですか?

可能な重複:
「javascript:void(0)」とはどういう意味ですか?

Backbone.jsのソースコードを見て、私はこれを見ました:

validObj[attr] = void 0;

void 0とは何ですか?ここでそれを使う目的は何ですか?

455
Randomblue

void 0はどういう意味ですか?

void[MDN] は1つの引数を取り、常にundefinedを返すプレフィックスキーワードです。

void 0
void (0)
void "hello"
void (new Date())
//all will return undefined

そのポイントは何ですか?

それはかなり役に立たないようですね。常にundefinedが返される場合、undefined自体を使用するだけで何が問題になりますか?

完璧な世界ではundefinedを安全に使うことができるでしょう:void 0よりもずっと簡単で理解しやすいです。しかし、これまでに気づいたことがない場合は、これは完璧な世界ではない _、特にJavascriptの場合は特に注意が必要です。

undefinedを使うことの問題は、undefinedが予約語ではないということでした( それは実際にはグローバルオブジェクトのプロパティです) [wtfjs] )。つまり、undefinedは許容される変数名なので、自分のカプリスで新しい値を割り当てることができます。

alert(undefined); //alerts "undefined"
var undefined = "new value";
alert(undefined) // alerts "new value"

注:これは、グローバルオブジェクトのundefinedプロパティを読み取り専用として定義するECMAScript 5以降をサポートする環境(つまり、実際にはどこでもIE 8)で問題にならなくなりました。自分のローカルスコープで変数をシャドウすることのみ可能です。ただし、この情報は下位互換性のためにまだ有用です。

alert(window.hasOwnProperty('undefined')); // alerts "true"
alert(window.undefined); // alerts "undefined"
alert(undefined === window.undefined); // alerts "true"
var undefined = "new value";
alert(undefined); // alerts "new value"
alert(undefined === window.undefined); // alerts "false"

一方、voidは上書きできません。 void 0alwaysを返しますundefined。一方、undefinedは、Javascript氏が望んでいると決めたものなら何でも構いません。

なぜvoid 0、特に?

なぜvoid 0を使うべきなのでしょうか。 0の何がそんなに特別なのですか? 1421000000または"Hello, world!"を同じくらい簡単に使用できないでしょうか。

そして答えは、はい、できます。それも同様に機能します。他の引数の代わりに0を渡すことの唯一の利点は、0が短くて慣用句であることです。

なぜこれはまだ関係がありますか?

undefinedは一般的に現代のJavaScript環境で信頼されることができますが、void 0の1つの些細な利点があります:それはより短いです。違いはコードを書くとき心配するのに十分ではありませんが、それはブラウザに送信されるバイト数を減らすためにほとんどのコードミニファイヤーがundefinedvoid 0に置き換えるほど十分に追加できます。

920
Peter Olson

void 0は未定義を返し、上書きすることはできませんが、undefinedは上書きすることができます。

var undefined = "HAHA";
97
epascarello

void は予約済みのJavaScriptキーワードです。式を評価し、常にundefinedを返します。

28
Digital Plane