Backbone.jsのソースコードを見て、私はこれを見ました:
validObj[attr] = void 0;
void 0
とは何ですか?ここでそれを使う目的は何ですか?
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 0
はalwaysを返しますundefined
。一方、undefined
は、Javascript氏が望んでいると決めたものなら何でも構いません。
void 0
、特に?なぜvoid 0
を使うべきなのでしょうか。 0
の何がそんなに特別なのですか? 1
、42
、1000000
または"Hello, world!"
を同じくらい簡単に使用できないでしょうか。
そして答えは、はい、できます。それも同様に機能します。他の引数の代わりに0
を渡すことの唯一の利点は、0
が短くて慣用句であることです。
undefined
は一般的に現代のJavaScript環境で信頼されることができますが、void 0
の1つの些細な利点があります:それはより短いです。違いはコードを書くとき心配するのに十分ではありませんが、それはブラウザに送信されるバイト数を減らすためにほとんどのコードミニファイヤーがundefined
をvoid 0
に置き換えるほど十分に追加できます。
void 0
は未定義を返し、上書きすることはできませんが、undefined
は上書きすることができます。
var undefined = "HAHA";
void
は予約済みのJavaScriptキーワードです。式を評価し、常にundefined
を返します。