国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

Javascript的比較匯總

2019-11-20 09:25:16
字體:
來源:轉載
供稿:網友

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

1.兩個對象的比較

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

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

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

如果我們這樣操作:

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

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

2.不同類型的比較

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

> 12 == "12"true> null == undefinedtrue> undefined == falsefalse> null == falsefalse> null === undefinedfalse

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

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

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

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

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

> NaN < 1false> NaN > 1false

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

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

3.對象跟原始值的比較

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

// 我直接明文寫出來了> a = {}{}// 1. valueOf 轉換> a.valueOf(){}// 2. 如果上面操作得到的不是一個原始值則進而用toString 轉換。(反之亦然)> a.toString()'[object Object]'> a == '[object Object]'true

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

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

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

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 平山县| 佛山市| 光泽县| 平泉县| 贡山| 尉犁县| 日照市| 普洱| 彰化县| 依兰县| 南昌市| 资兴市| 阜南县| 正定县| 永顺县| 枞阳县| 绥江县| 普宁市| 漳平市| 海口市| 司法| 仙桃市| 南通市| 河间市| 福建省| 新竹县| 辽宁省| 石阡县| 六盘水市| 鹤壁市| 旺苍县| 临潭县| 西乌| 贵阳市| 叙永县| 金坛市| 抚州市| 英山县| 乐东| 呼和浩特市| 阜新|