本篇文章為大家展示了如何在JavaScript中使用相等運算符,內(nèi)容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。
創(chuàng)新互聯(lián)公司堅持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:成都網(wǎng)站設(shè)計、網(wǎng)站建設(shè)、外貿(mào)網(wǎng)站建設(shè)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時代的夏河網(wǎng)站設(shè)計、移動媒體設(shè)計的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!1. 操作數(shù)類型不同
對比結(jié)果是false
1 === "1" // false true === "true" // false undefined === true //false 1 === true //false
2.同一類原始類型值
如果兩個值都是原始類型值(數(shù)字、字符串、布爾值),值相同就返回true,值不同就返回false。
對于原始類型值,要注意的是,0和-0是相等的;如果兩個值是字符串,需要它們在16位編碼的相同位置上有相同的值才是相等。如果是不同的16位編碼序列,就算有相同的內(nèi)容,相同的長度,結(jié)果也是不相等。
'1' === '0' //false 1 === 0x1 // true
3.同是對象
如果兩個值是對象(數(shù)組、函數(shù)、對象、Symbol),對于兩個對象比較的是引用,如果引用指向的是不同的對象,則結(jié)果是不相等。
{} === {} // false [] === [] // false (function () {} === function () {}) // false var v1 = {}; var v2 = v1; //v2和v1指向同一個引用地址 v1 === v2 // true // 沒有參數(shù)的情況 let s1 = Symbol(); let s2 = Symbol(); s1 === s2 // false // 有參數(shù)的情況 let s1 = Symbol('foo'); let s2 = Symbol('foo'); let s3 = s1; s1 === s2 // false s1 === s2 // true
4. null和undefined
如果兩個值都是null或者都是undefined,結(jié)果是true
null === null //true undefined === undefined //true
5.NaN
如果兩個值都是NaN,結(jié)果是false
NAN === NAN //false
NaN和任何數(shù)字都不相等,包括它自身
相等運算符
1. 值的類型相同
應(yīng)用嚴格相等運算符轉(zhuǎn)換規(guī)則的值類型相同規(guī)則(除:操作數(shù)類型不同)。
2.不同原始類型值
如果是不同原始類型值(數(shù)字、字符串、布爾值)進行比較,將非數(shù)字類型轉(zhuǎn)換成數(shù)字,再進行比較。
0 == undefined //false // 等同于 0 == Number(undefined) // 等同于0 == NAN 0 == null //false // 等同于 0 == Number(null) 1 == true // true // 等同于 1 == Number(true) 'true' == true // false // 等同于 Number('true') == Number(true) // 等同于 NaN === 1 '' == 0 // true // 等同于 Number('') == 0 // 等同于 0 == 0 '1' == true // true // 等同于 Number('1') == Number(true) // 等同于 1 == 1 '\n 123 \t' == 123 // true // 因為字符串轉(zhuǎn)為數(shù)字時,省略前置和后置的空格
3. 對象和原始類型值
如果其中一個操作數(shù)是對象,另外一個是原始類型值(數(shù)字、字符串、布爾值),按如下規(guī)則轉(zhuǎn):
將對象轉(zhuǎn)換成原始類型值
轉(zhuǎn)換后的原始類型值與另一個操作數(shù)的類型一樣,使用值類型相同的規(guī)則
如果不一樣,將非數(shù)字類型轉(zhuǎn)換成數(shù)字再進行比較。
例1:對象對比數(shù)字
[1] == 1 //true
解析:
a. [1]先轉(zhuǎn)換成原始值"1";
b. 轉(zhuǎn)換后與右邊的操作數(shù)1類型不一樣,將"1"轉(zhuǎn)換成1;
c. 1 == 1 結(jié)果是true
例2:對象對比字符串
[1] == "1"
解析:
a. [1]先轉(zhuǎn)換成原始值"1";
b. 轉(zhuǎn)換后與右邊的操作數(shù)"1"類型一樣,"1"=="1",結(jié)果是true;
例3:對象對比布爾值
[1] == true
解析:
a. [1]先轉(zhuǎn)換成原始值"1";
b. 轉(zhuǎn)換后與右邊的操作數(shù)true類型不一樣,將右邊的操作數(shù)true轉(zhuǎn)換成1;
c. 1 == 1結(jié)果是true
4. null和undefined
如果其中一個值是null,另外一個是undefined,結(jié)果是相等
null == undefined
對象轉(zhuǎn)換為原始類型規(guī)則
比較操作符的操作數(shù)可能是任意類型,然而只有數(shù)字和字符串才能真正執(zhí)行比較操作,因此那些不是數(shù)字和字符串的類型都將進行類型轉(zhuǎn)換。轉(zhuǎn)換的規(guī)則如下:
如果對象類型是Date,會調(diào)用該對象的toString();
其他情況下,如果valueOf()返回的是原始類型,會調(diào)用對象的valueOf();
其他情況下(如果valueOf()不存在或沒有返回原始類型),會調(diào)用toString()方法,大部分情況下是用的這種轉(zhuǎn)換。
如果沒有toString()方法,則拋出一個類型異常錯誤
上面的規(guī)則只是應(yīng)用于+、==、!=中涉及到的對象轉(zhuǎn)為原始類型的轉(zhuǎn)換規(guī)則,如果是> ,< 等其他運算符涉及的轉(zhuǎn)換,轉(zhuǎn)換規(guī)則中除去日期對象的特殊情況,其他是一樣的,也就是說規(guī)則是下面這樣的:
其他情況下,如果valueOf()返回的是原始類型,會調(diào)用對象的valueOf();
其他情況下(如果valueOf()不存在或沒有返回原始類型),會調(diào)用toString()方法,大部分情況下是用的這種轉(zhuǎn)換。
如果沒有toString()方法,則拋出一個類型異常錯誤
上述內(nèi)容就是如何在JavaScript中使用相等運算符,你們學(xué)到知識或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識儲備,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。