什么价值不严格等于它本身&;javascript中的NaN

什么价值不严格等于它本身&;javascript中的NaN,javascript,nan,Javascript,Nan,我需要一个变量的值,以便在代码中得到警告“是” var a; // set the value of a here ... a=? // don't edit the code below: if (a === a) { alert('No!'); } else { if (isNaN(a)) { alert('Not again!'); } else { alert('Yes'); } } 什么是a?考虑以下几

我需要一个变量的值,以便在代码中得到警告“是”

var a;

// set the value of a here ...
a=?

// don't edit the code below:
if (a === a) { 
    alert('No!'); 
} else {
    if (isNaN(a)) {
        alert('Not again!');
    }
    else { 
        alert('Yes');
    }
}

什么是a?

考虑以下几点:

n = 0;
Object.defineProperty(window, 'a', { get: function() { return n++; } });

> a === a
< false
n=0;
defineProperty(窗口,'a',{get:function(){return n++;}}});
>a==a
首先,感谢@skbhardwaj.india提出这个问题,并感谢@torazaburo回答这个问题

受@torazaburo答案的启发,我希望独立于外部/全局变量,因此使用闭包

defineProperty(窗口,'a',{get:(函数(p){return 函数(){return p++;}}(0)})


这是测验题吗?这里的问题是什么?如果(a===a)是假的,那怎么办呢?我不明白。除了NaN之外,我不知道还有其他的案例,这并不是说这种奇异的案例不存在。为什么这很重要?如果这是一个求职面试的问题,你应该撤回你对这样一家提出无关琐事问题的公司的申请。这怎么会是一个“编程问题”?@EdgarSanchez不,NaN不是===NaN。我在想一个函数对某个全局变量有副作用的类似问题。但是,我想不出在读取变量时调用函数的方法。谢谢你提出的使用“财产”的建议…@torazaburo:真是太棒了…我的大脑只停在了NaN@skbhardwaj.india:node.js使用
GLOBAL
而不是
window
@torazaburo:非常感谢!另外,您能告诉我为什么此解决方案仅在第一次运行时运行良好。如果我再次执行相同的代码,我会得到一个错误“TypeError:无法重新定义不可配置的属性“a”。[我正在firebug控制台上执行代码。]@skbhardwaj.india为了能够重新执行,请将属性
configurable:true
get
var a=NaN一起添加到属性描述符中
//重新定义isNaN
window.isNaN=函数isNaN(p){if(p==NaN){return true;}else{return false;}