undefinedの代わりにvoid 0を使います.
1990 ワード
いくつかのフレームのソースコードを読んでいると、undefinedの代わりにvoid 0を使っています.簡単なGoogleです.
void演算子
void演算子は、与えられた表現を求めてundefinedを返します.
私たちはよく次のように判断します.
一つは、typeofで、元の値undefinedに対して、typeofは常に文字列'undefined'を返します.
void演算子
void演算子は、与えられた表現を求めてundefinedを返します.
void 0; // undefined
void ('0'); // undefined
void "hello world"; // undefined
void function (){return 'foo'}() // undefined
undefined私たちはよく次のように判断します.
if (foo === undefined) {
foo = 'foo'
}
厳密にはこのようなコードは安全ではありません.デフォルトではundefinedの値は変更されていません.undefinedはJavaScriptの予約ワードではないので、グローバル変数上の属性の一つです.属性値は元の値undefinedです.ECMAScript 5の前に、window.undefinedに値を割り当てると、この属性が上書きされます.ECMAScript 5からundefinedは配置されず、書き換えられない属性です.Object.getOwnPropertyDescriptor(window, 'undefined');
/* {
value: undefined,
writable: false,
enumerable: false,
configurable: false
} */
しかし、undefinedは予約されていないため、依然としてローカルスコープでundefinedの変数を宣言し、その値を変更することができます.function foo () {
let undefined = 'hello world';
return function (v) {
return v === undefined;
}
}
let isUndefined = foo();
let bar;
isUndefined(bar); // false
isUndefined(undefined); // false
isUndefined('hello world'); // true
安全な書き方一つは、typeofで、元の値undefinedに対して、typeofは常に文字列'undefined'を返します.
function foo () {
let undefined = 'hello world';
return function (v) {
return typeof v === 'undefined';
}
}
let isUndefined = foo();
let bar;
isUndefined(bar); // true
isUndefined(undefined); // true
isUndefined('hello world'); // false
もう一つはvoid演算子で、void演算子は常に元の値undefinedに戻ります.function foo () {
let undefined = 'hello world';
return function (v) {
return v === void 0;
}
}
let isUndefined = foo();
let bar;
isUndefined(bar); // true
isUndefined(undefined); // true
isUndefined('hello world'); // false
もちろん、void'hello world'と比較してもいいですが、void 0の文字数はもっと短くて、typeofより書くのが便利です.フレームコードは自分の実行文脈を知らないので、undefinedタグが再割り当てされたかどうかは仮定できないので、void 0で元の値かどうかを判断します.