我們知道在js中,==是進(jìn)行的值比較,在比較運(yùn)算之前,js會將不同類型的值轉(zhuǎn)換為相同類型的值在進(jìn)行比較,轉(zhuǎn)換情況如下:
1:當(dāng)比較對象中存在Boolean類型時(shí),任意值與布爾值進(jìn)行比較的時(shí)候都會轉(zhuǎn)換為數(shù)值進(jìn)行比較,(引用類型轉(zhuǎn)換了Boolean均為true;數(shù)值0為false,其余均為true;空字符串為false,其余均為true。)
2:當(dāng)比較對象中存在Object類型時(shí),js會嘗試使用valueOf方法或toString()放將對象轉(zhuǎn)換為描述對象的數(shù)值或字符串
3:數(shù)字與字符串比較時(shí),字符串轉(zhuǎn)換為數(shù)字,字符串轉(zhuǎn)換數(shù)字失敗時(shí)為NaN,出現(xiàn)情況4;
4:比較對象中存在NaN時(shí)均返回false;
5:null和undefined比較時(shí)不會進(jìn)行類型轉(zhuǎn)換但是他們相等,因?yàn)閡ndefined派生于null,ECMAScript標(biāo)準(zhǔn)規(guī)定二者進(jìn)行相等行測試時(shí)返回true;
舉個(gè)例子:
[] == false
=> [].valueOf() == false
=> [].toString() == false
=> "" == false
=> true
{} == false
=> {}.valueOf() == false
=> {}.toString() == false
=> "[object object]" == false
=> false
另:
===等號比較時(shí)其實(shí)就是不進(jìn)行類型轉(zhuǎn)換,即通常我們所理解的類型也會進(jìn)行比較
本文來自 常駐客 的CSDN 博客 ,全文地址請點(diǎn)擊:https://blog.csdn.net/local_people/article/details/71358194?utm_source=copy