いいえ。彼らには違いがあります。
最初にwindow.console
の値がTruthyであり、console
プロパティの2番目のチェックがwindow
に存在するかどうかがチェックされます。
このような変数を作成したとします。
window.myName = "";
さて、if (window.MyName)
は空の文字列をJavaScriptでFalsyあるとして、条件を満たすために失敗します。 myName
がwindow
オブジェクトのプロパティであるとして
console.log(Boolean(window.myName)); // false
しかしif ("myName" in window)
は、条件を満たします。
console.log(Boolean("myName" in window)); // true
注:テストされているプロパティは、プロトタイプ階層のどこかにある場合でもin
オペレータがtrue
を返します。オブジェクト{}
メソッドtoString
を継承しているため、例えば、
console.log("toString" in {}); // true
はtrue
を返します。
あなたは、オブジェクト自身にプロパティが存在することを確認するには、あなたは彼らが違いを持っているこの
console.log({}.hasOwnProperty("toString")); // false
'window.console = false;'を実行して、両方の構文を実行してみてください。何が起こるか見る - https://jsfiddle.net/abhitalks/xmohL5wr/ – Abhitalks