3.5.7 相等操作符

確定兩個變量是否相等,是編程中的一個非常中藥的操作。在比較字符串、數(shù)值和布爾值的相等性時,問題還比較簡單。但涉及到對象的比較時,問題就變得復雜了。最早的ECMAScript中的相等和不相等操作符會在執(zhí)行比較前,現(xiàn)將對象轉(zhuǎn)換為相似的類型。后來,有人提出了這種轉(zhuǎn)換到底是否合理的質(zhì)疑。最后,ECMAScrip的解決方案就是提供兩組操作符:相等和不相等——先轉(zhuǎn)換后比較,全等和不全等——僅比較不轉(zhuǎn)換。
1. 相等和不相等
ECMAScript中的相等操作符由兩個等于號(==)表示,如果兩個操作數(shù)相等,則返回true。而不相等操作符是由嘆號后跟等于號(!=)表示,如果兩個操作數(shù)不相等,則返回true。這兩個操作符都會先轉(zhuǎn)換操作數(shù)(通常稱為強制轉(zhuǎn)型),然后再比較它們的相等性。在轉(zhuǎn)換不同的數(shù)據(jù)類型時,相等和不相等操作符遵循以下列基本規(guī)則:
*如果有一個操作數(shù)時布爾值,則在比較相等性之前先將其轉(zhuǎn)換為數(shù)值;
*如果一個操作數(shù)是字符串,另一個操作數(shù)是數(shù)值,在比較相等性之前先將字符串轉(zhuǎn)換為數(shù)值;
*如果一個操作數(shù)是對象,另一個操作數(shù)不是,則調(diào)用對象的valueOf()方法,用得到的基本類型值按照前面的規(guī)則比較;
這兩個操作符在進行比較的時候要遵循下列規(guī)則:
*null和undefined是相等的;
*要比較相等性之前,不能將null和undefined轉(zhuǎn)換為其他任何值;
*如果有一個操作數(shù)是NaN,則相等操作符返回false,而不相等操作符返回true。重要提示:即使兩個操作數(shù)都是NaN,相等操作符也返回false;因為按照規(guī)則,NaN不等于NaN;
*如果兩個操作數(shù)都是對象,則比較它們是不是同一個對象。如果兩個操作數(shù)都指向同一個對象,則相等操作符返回true,否則,返回false。
下表列出了一些特殊情況及比較結(jié)果:

表達式
null==undefined true
"NaN"==NaN false
5==NaN false
NaN==NaN false
NaN!=NaN true
false==0 true
true==1 true
true==2 false
undefined==0 false
null==0 false
"5"==5 true

2. 全等和不全等
除了在比較之前不轉(zhuǎn)換操作數(shù)之外,全等和不全等操作符與相等和不相等操作符沒有什么區(qū)別。全等操作符由3個等于號(===)表示,它只在兩個操作數(shù)未經(jīng)轉(zhuǎn)換就相等的情況下返回true,如下面的例子:

var result1 = ("55" == 55);//true,因為轉(zhuǎn)換后相等
var result2 = ("55" === 55);//false,因為不同的數(shù)據(jù)類型不相等 

不全等操作符有一個嘆號后跟兩個等于號(!==)表示,它在兩個操作數(shù)未經(jīng)轉(zhuǎn)換就不相等的情況下返回true。例如:

var result1 = ("55" != 55);//false,因為轉(zhuǎn)換后相等
var result2 = ("55" !== 55);//true,因為不同的數(shù)據(jù)類型不相等

記?。簄ull == undefined會返回ture,因為他們是類似的值;但null === undefined會返回false,因為它們是不同類型的值。

由于相等和不相等操作符存在類型轉(zhuǎn)換問題,而為了保持代碼中數(shù)據(jù)類型的完整性,推薦使用全等和不全等操作符。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

  • 第2章 基本語法 2.1 概述 基本句法和變量 語句 JavaScript程序的執(zhí)行單位為行(line),也就是一...
    悟名先生閱讀 4,550評論 0 13
  • 3.5.1一元操作符 只能操作一個值的操作符叫做一元操作符。 (一)遞增和遞減操作符 遞增遞減操作符借鑒于...
    震撼著閱讀 441評論 0 1
  • 本章內(nèi)容 語法 數(shù)據(jù)類型 流控制語句 理解函數(shù) 3.1 語法 3.1.1 區(qū)分大小寫 區(qū)分大小寫 3.1.2 標識...
    悶油瓶小張閱讀 794評論 0 0
  • 1、標識符 標識符是指變量、函數(shù)、屬性的名字,或函數(shù)的參數(shù)。 格式規(guī)則: 第一個字符必須是一個字母、下劃線(_)或...
    霜天曉閱讀 764評論 0 0
  • 一元操作符 只能操作一個值的操作符。 遞增和遞減操作符 前置型:位于要操作的變量之前; 后置型:位于要操作的變量之...
    Sketch閱讀 391評論 0 0

友情鏈接更多精彩內(nèi)容