1. 程式人生 > >javascript中的"x != x"

javascript中的"x != x"

AR 內存地址 指向 obj 靜態方法 false 一個 原理 目前

在javascript的運用中,經常遇到判斷兩個 對象/值 是否相等的情況。有些表明上看著一樣,其實他們不一樣。有些特殊情況,需要我們辨別。

引用類型

他們都是引用類型,存儲的空間將從堆中分配。變量處的值是一個指針,指向存儲對象的內存處。

具有相同屬性的兩個對象。

var a = { x : 1 }
var b = { x : 1 }
a === b // false  兩個單獨的對象永不相等
a == b // false  兩個單獨的對象永不相等

他們實際是new Object()的簡寫。初始化變量a時候,賦了一個對象值,那麽在堆中開辟了一個新空間。
初始化變量b時候,也是開辟了一個新空間。兩個變量,所指向的內存地址是不一樣的。

兩個單獨的空數組.

var a = [], b = []
a === b // false  兩個單獨的數組永不相等。
a == b // false  兩個單獨的數組永不相等。

以上兩個例子,原理相同。

原始類型

判斷Number類型的值是否為NaN

ECMAScript (ES6)包含Number.isNaN()函數。
通過Number.isNaN(x)來檢測變量x是否是一個非數值。然而,在缺少Number.isNaN函數的情況下,通過表達式(x != x)來檢測變量x是否是NaN會更加可靠。

String類型

String類型,我目前沒有發現相同字面量,會不相等的情況。

Symbol類型

const s1 = Symbol() 
const s2 = Symbol()
s1 == s2 // false
s1 === s2 // false

Symbol()函數返回symbol類型的值,都是唯一的,不相等的,並且具有靜態屬性和靜態方法。

[完]

javascript中的"x != x"