Javascript x===x返回的值是否为false而没有NaN?
没有NaN的Javascript x===x返回的值是否为false而没有NaN?,javascript,Javascript,没有NaN的x===x返回的false是否有任何值 例如: > x = 1 1 > x === x true > x = {} {} > x === x true > x = new Date() Wed Nov 13 2013 15:44:22 GMT+0200 (EET) > x === x true > x = NaN NaN > x === x false 我看到x==x返回false的唯一值是whenisNaN(x)==true 对于x
x===x
返回的false
是否有任何值
例如:
> x = 1
1
> x === x
true
> x = {}
{}
> x === x
true
> x = new Date()
Wed Nov 13 2013 15:44:22 GMT+0200 (EET)
> x === x
true
> x = NaN
NaN
> x === x
false
我看到x==x
返回false
的唯一值是whenisNaN(x)==true
对于x==x
返回的false
,是否还有另一个x
值?欢迎正式推荐 规范列出了严格相等的条件。没有其他此类情况,除非您计算
+0
和-0
(用于验证对只读定义属性的更改)没有此类异常。两个相等的非
NaN
值之间的严格比较将始终为真(正确引用)。但是,表达式x
可以在等式求值期间更改其值。当使用访问器属性描述符(即属性getter)时,属性访问可能会发生这种情况:
如果对全局对象窗口
(或节点中的全局
)执行此操作,则可以看到全局范围变量的x===x
比较失败:
Object.defineProperty(window, "bar", {
get: function() {
return Math.random();
}
})
bar === bar; // false
什么是
x
?可能在您的示例中使用x
和y
或其他东西。@是否使用变量?答案是否,但我现在无法查找引用。@Tibos是的,这会很有用@イオニカビザウ 你的个人资料信息小部件真的很有趣!代码在任何地方都可用吗?但是,+0===+0
和-0==-0
,所以即使是这些代码也不可用。根据规范,+0和-0确实相等。但是,该规范也没有列出所有数字的情况,这就是为什么会出现默认的假返回:无穷大不被认为是相等的,即使它们共享符号。@Yann,1/0===1/0
在Firefox上对我来说是true
。+0===-0
返回true
。为什么它们很重要?澄清一下:严格的平等并不能区分-0
和+0
,而SameValue
是有区别的。@comfrek好吧,当,我没有考虑到这一点。我会把这句话加到你的回答中!这不是一个具有相同价值的案例;这是一个同一个表达式对不同值求值的例子。@ComFreak-我的眼睛!护目镜没用@YannVernier,是的,但值得一提。@apsillers这太好了!在NodeJS和浏览器中,此对象也能很好地使用。
Object.defineProperty(window, "bar", {
get: function() {
return Math.random();
}
})
bar === bar; // false