问题在代码中
var a = 3;
console.log( a in window ); // false,-------------为什么,
// NaN明明是Number的属性,为什么可以直接使用,也可以通过window访问
console.log(NaN); // NaN
console.log(Number.NaN); // NaN
console.log(window.NaN); // NaN
console.log(Number.hasOwnProperty(NaN)); // true
首先来解决第一个问题,截图是表示打印出来的window对象

可以看到a的确是在window对象上的,那为什么console.log(a in window)是错误的呢,下面就要看看关键词in到底是什么,参考MDN的如下
注意到有一个A string,表示它要是一个字符串(或者 symbol),你把代码改成
下面解决NaN的问题,同样下面是window的截图

window下面是有NaN的