javascript中的"x != x"
阿新 • • 發佈:2018-05-17
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"