在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 教程/ HTML/ 相等與比較
arguments 對(duì)象
類型轉(zhuǎn)換
構(gòu)造函數(shù)
instanceof 操作符
自動(dòng)分號(hào)插入
為什么不要使用 eval
對(duì)象使用和屬性
作用域與命名空間
this 的工作原理
typeof 操作符
相等與比較
閉包和引用
數(shù)組遍歷與屬性
Array 構(gòu)造函數(shù)
原型
hasOwnProperty 函數(shù)
undefined 和 null
函數(shù)聲明與表達(dá)式
setTimeout 和 setInterval
for in 循環(huán)

相等與比較

JavaScript 有兩種方式判斷兩個(gè)值是否相等。

等于操作符

等于操作符由兩個(gè)等號(hào)組成:==

JavaScript 是弱類型語(yǔ)言,這就意味著,等于操作符會(huì)為了比較兩個(gè)值而進(jìn)行強(qiáng)制類型轉(zhuǎn)換。

    ""           ==   "0"           // false
    0            ==   ""            // true
    0            ==   "0"           // true
    false        ==   "false"       // false
    false        ==   "0"           // true
    false        ==   undefined     // false
    false        ==   null          // false
    null         ==   undefined     // true
    " \t\r\n"    ==   0             // true

上面的表格展示了強(qiáng)制類型轉(zhuǎn)換,這也是使用 == 被廣泛認(rèn)為是不好編程習(xí)慣的主要原因, 由于它的復(fù)雜轉(zhuǎn)換規(guī)則,會(huì)導(dǎo)致難以跟蹤的問(wèn)題。

此外,強(qiáng)制類型轉(zhuǎn)換也會(huì)帶來(lái)性能消耗,比如一個(gè)字符串為了和一個(gè)數(shù)字進(jìn)行比較,必須事先被強(qiáng)制轉(zhuǎn)換為數(shù)字。

嚴(yán)格等于操作符

嚴(yán)格等于操作符由個(gè)等號(hào)組成:===

不像普通的等于操作符,嚴(yán)格等于操作符不會(huì)進(jìn)行強(qiáng)制類型轉(zhuǎn)換。

    ""           ===   "0"           // false
    0            ===   ""            // false
    0            ===   "0"           // false
    false        ===   "false"       // false
    false        ===   "0"           // false
    false        ===   undefined     // false
    false        ===   null          // false
    null         ===   undefined     // false
    " \t\r\n"    ===   0             // false

上面的結(jié)果更加清晰并有利于代碼的分析。如果兩個(gè)操作數(shù)類型不同就肯定不相等也有助于性能的提升。

比較對(duì)象

雖然 ===== 操作符都是等于操作符,但是當(dāng)其中有一個(gè)操作數(shù)為對(duì)象時(shí),行為就不同了。

    {} === {};                   // false
    new String('foo') === 'foo'; // false
    new Number(10) === 10;       // false
    var foo = {};
    foo === foo;                 // true

這里等于操作符比較的不是值是否相等,而是是否屬于同一個(gè)身份;也就是說(shuō),只有對(duì)象的同一個(gè)實(shí)例才被認(rèn)為是相等的。 這有點(diǎn)像 Python 中的 is 和 C 中的指針比較。

注意:為了更直觀的看到=====的區(qū)別,可以參見(jiàn)JavaScript Equality Table

結(jié)論

強(qiáng)烈推薦使用嚴(yán)格等于操作符。如果類型需要轉(zhuǎn)換,應(yīng)該在比較之前顯式的轉(zhuǎn)換, 而不是使用語(yǔ)言本身復(fù)雜的強(qiáng)制轉(zhuǎn)換規(guī)則。