18

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 === xwhere が返される唯一の値falseは whenであることがわかりますisNaN(x) === true

xfor をx === x返す別の値はありますfalseか? 公式リファレンスは大歓迎です!

4

2 に答える 2

20

NaN 2 つの等しい非値の厳密な比較は常に true になります ( SLaks の回答は仕様を正しく引用しています)。ただし、等式の評価中に式の xが変わる可能性があります。これは、アクセサー プロパティ記述子 (つまり、プロパティ ゲッター) を使用する場合のプロパティ アクセスで発生する可能性があります。

foo = {};
Object.defineProperty(foo, "bar", {
    get: function() {
        return Math.random();
    }
})

foo.bar === foo.bar; // false

グローバル オブジェクトwindow(またはノード) に対してこれを行うと、グローバル スコープ変数globalの比較が失敗することがわかります。x === x

Object.defineProperty(window, "bar", {
    get: function() {
        return Math.random();
    }
})

bar === bar; // false
于 2013-11-13T13:53:48.680 に答える