亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Javascript的比較匯總

 更新時間:2016年07月25日 11:17:00   作者:簡書作者  
本文匯總了Javascript中兩個對象的比較、不同類型的比較以及對象跟原始值的比較,并進行了實例演示,希望能幫助到有需要的朋友們。

在Javascript應用過程中會遇到各式各樣的比較,今天給大家整理了三種情況,一起來學習下。

1.兩個對象的比較

Javascript的比較中參雜了一些比較奇怪的特性,我們來看一些比較簡單的比較。

// 原始值的比較
> var a = 12
undefined
> var b = 12
undefined
> a == b
true
> a === b
true
// 對象的比較
> var c = []
undefined
> var d = []
undefined
> c == d
false
> c === d
false

由上面的結果可以看出比較兩個原始值跟比較對象規(guī)則似乎有點不同,比較兩個對象值的話即便它們的值相同,但是最后的結果是不一樣的。比較兩個對象,應該比較的是兩個對象的引用。

如果我們這樣操作:

> var m = {}
undefined
> n = m
{}
> n === m
true

表示兩個變量都指向同一個對象,所以它們就是相同的了。

2.不同類型的比較

還有下面這個比較特殊的情況

> 12 == "12"
true

> null == undefined
true
> undefined == false
false
> null == false
false
> null === undefined
false

為什么整型能夠等于字符串?這是由于==(等于而非全等)并不比較類型,它比較之前會將需要比較的值進行類型轉(zhuǎn)換,這里的話會將字符串轉(zhuǎn)換成數(shù)值類型然后進行比較。為什么這么肯定? 我們做一下實驗。

> 1 + 2
3
> 1 + "2"
'12'
> 2 < "12"
true
> "2" < "12"
false

從上面例子可以看出,數(shù)值2確實是比字符串12小的。如果比較之前是數(shù)值轉(zhuǎn)換成字符串那結果應該是"2" > "12"才對。
還不相信?我再舉個例子。

> "12d" > 12
false
> "12d" < 12
false
> "12d" == 12
false
> "12" < "12d"
true

這是為什么呢?如果是將12轉(zhuǎn)換成字符串的話,那12d應該是大于12才對吧。為什么怎么比較都是false?我估計是由于下面這個特殊的家伙。

> NaN < 1
false
> NaN > 1
false

NaN無論跟什么進行比較,都會返回false。包括它自己。所以要判斷一個變量是不是NaN最好的辦法就是x != x如果返回的是true則表明x是NaN。那么這里應該就是當12d要轉(zhuǎn)換成數(shù)值類型的時候由于帶有特殊的字符,最后變成了NaN了,跟數(shù)值類型無論怎么比較結果都是false。

對于數(shù)字與字符串操作符來說,加號運算符跟比較運算符的行為有所不同。加號運算符更偏愛字符串,如果其中一個操作數(shù)是字符串的話則會轉(zhuǎn)換成字符串。而比較運算符則比較偏愛數(shù)字,只有在兩個數(shù)字都為字符串的時候才會進行字符串比較。
至于上面的null 跟 undefined。。。。。我暫時也不知道怎么解釋它們的行為。我也只能姑且記住。因為它們比較特殊。

3.對象跟原始值的比較

如果兩個需要比較的對象一個是javascript對象一個是字符串,則會進行某種程度上的類型轉(zhuǎn)換。想辦法把對象的值轉(zhuǎn)換成原始值。一般來說就有valueOf, toString兩種方法。下面是一個空對象的轉(zhuǎn)換流程:

// 我直接明文寫出來了
> a = {}
{}
// 1. valueOf 轉(zhuǎn)換
> a.valueOf()
{}

// 2. 如果上面操作得到的不是一個原始值則進而用toString 轉(zhuǎn)換。(反之亦然)
> a.toString()
'[object Object]'
> a == '[object Object]'
true

上面其實是一個內(nèi)置對象的轉(zhuǎn)換過程,也是javascript的機制。首先它會調(diào)用valueOf進行轉(zhuǎn)換,如果得到的值并不是一個原始值,則會進而調(diào)用toString進行轉(zhuǎn)換,最后得到的值是'[object Object]'一個很奇怪的值,不過它是原始值。如果把變量a跟這個值做相等判斷(不是全等)則可以得出一個true的結果。(是不是被它搞崩潰了?)

然而權威指南給了如下原則,我們可以參考一下。

原始值的轉(zhuǎn)換JavaScript語言核心內(nèi)置類首先嘗試使用ValueOf轉(zhuǎn)換,然后使用toString進行轉(zhuǎn)換。除了日期類,它只使用toString進行轉(zhuǎn)換。那些不是JavaScript核心中的對象則通過各自的實現(xiàn)中定義的方式來轉(zhuǎn)換為原始值。
根據(jù)上面的解釋。我們的a={}與原始值進行比較的時候,會先調(diào)用valueOf函數(shù),它的結果是{}顯然不是一個原始值。則會使用toString進行轉(zhuǎn)換。最后得出了那個很奇怪的結果。不過這個很奇怪的結果'[object Object]'確實是 {}的原始值。(它是字符串的字面量)。

以上就是Javascript中的比較匯總,希望本文所述對大家學習javascript時有所幫助。

相關文章

最新評論