Backbone.js のソースコードを読んでみると、次のことがわかりました。
validObj[attr] = void 0;
とは何ですかvoid 0
?ここでそれを使用する目的は何ですか?
ベストアンサー1
どういうvoid 0
意味?
void
[MDN]は、1 つの引数を取り、常に undefined を返すプレフィックス キーワードです。
例
console.log(void 0);
console.log(void (0));
console.log(void "hello");
console.log(void (new Date()));
//all will return undefined
それは何の意味があるのですか?
かなり役に立たないように思えますね。常に undefined を返すのであれば、 を使用するだけで何が問題になるのでしょうかundefined
?
完璧な世界では、 を安全に使用できるでしょうundefined
。これは よりもはるかに単純で理解しやすいからですvoid 0
。しかし、これまで気付いたことがなくても、これは完璧な世界ではありません。特に JavaScript に関してはそうです。
問題は、予約語ではないundefined
(undefined
これは実際にはグローバルオブジェクトのプロパティです[wtfjs]つまり、 はundefined
許容される変数名なので、自由に新しい値を割り当てることができます。
(function () {
console.log(undefined); // logs "undefined"
var undefined = "new value";
console.log(undefined); // logs "new value"
})();
注: これは、ECMAScript 5 以降をサポートする環境 (つまり、IE 8 以外のすべての環境) では問題になりません。これらの環境では、undefined
グローバル オブジェクトのプロパティが読み取り専用として定義されます (そのため、変数をシャドウできるのはローカル スコープ内のみです)。ただし、この情報は下位互換性のために依然として役立ちます。
(function () {
console.log(window.hasOwnProperty('undefined')); // logs "true"
console.log(window.undefined); // logs "undefined"
console.log(undefined === window.undefined); // logs "true"
var undefined = "new value";
console.log(undefined); // logs "new value"
console.log(undefined === window.undefined); // logs "false"
})();
void
一方、 はオーバーライドできません。 は常にundefined を返します。void 0
一方、 は、JavaScript が望むものなら何でも設定できます。undefined
具体的になぜですかvoid 0
?
なぜ を使用する必要があるのでしょうかvoid 0
? の何が特別なのでしょうか? 、、 またはを0
簡単に使用できないのでしょうか?1
42
1000000
"Hello, world!"
答えは、はい、できますし、同じように機能します。0
他の引数の代わりにを渡す唯一の利点は0
、短くて慣用的なことです。
なぜこれがまだ関連性があるのでしょうか?
undefined
は、現代の JavaScript 環境では一般的に信頼できますが、 には というささいな利点が 1 つありますvoid 0
。それは、短いことです。この違いは、コードを書くときに心配するほどではありませんが、大規模なコード ベースでは、ブラウザに送信されるバイト数を減らすためにundefined
、ほとんどのコード縮小ツールが に置き換えるほど大きな違いになる可能性があります。void 0