Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/403.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript x===x返回的值是否为false而没有NaN?_Javascript - Fatal编程技术网

Javascript x===x返回的值是否为false而没有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

没有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
的唯一值是when
isNaN(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