抽象相等操作符(==)是如何轉(zhuǎn)換對象類型的似谁?

抽象相等操作符 ("loose equality","double equals") 掠哥,即 == 巩踏,相信大家伙兒都不陌生,我們都知道它比較的兩個操作數(shù)如果是不同類型的续搀,就會嘗試在比較之前將它們轉(zhuǎn)換為相同類型(原始值)塞琼。

比如:如果操作數(shù)之一是對象,另一個是數(shù)字或字符串禁舷,會嘗試使用對象的 valueOf() 彪杉,若無法轉(zhuǎn)換成原始值,再調(diào)用對象的 toString() 方法將對象轉(zhuǎn)換為原始值牵咙。
舉個例子:

// 阿里派近、百度、騰訊面試題

// ? 位置應(yīng)該怎么寫才能輸出 true
var a = ?;
console.log(
  a == 1 &&
  a == 2 &&
  a == 3
);

分析:這道題是在考抽象相等操作符(==)的運算規(guī)則以及類型轉(zhuǎn)換的規(guī)則洁桌,那么我們開始嘗試一下渴丸。
先貼一下 == 操作符的判斷規(guī)則:
● 如果兩個操作數(shù)都是對象,則僅當兩個操作數(shù)都引用同一個對象時才返回 true。
● 如果一個操作數(shù)是 null曙强,另一個操作數(shù)是 undefined残拐,則返回 true。
● 如果兩個操作數(shù)是不同類型的碟嘴,就會嘗試在比較之前將它們轉(zhuǎn)換為相同類型:
○ ○ 當數(shù)字與字符串進行比較時,會嘗試將字符串轉(zhuǎn)換為數(shù)字值娜扇。
○ ○ 如果操作數(shù)之一是 Boolean错沃,則將布爾操作數(shù)轉(zhuǎn)換為1或0雀瓢。
■■■ 如果是 true,則轉(zhuǎn)換為 1刃麸。
■■■ 如果是 false,則轉(zhuǎn)換為 0泊业。
○ ○ 如果操作數(shù)之一是對象把沼,另一個是數(shù)字或字符串吁伺,會嘗試使用對象的 valueOf() 和 toString() 方法將對象轉(zhuǎn)換為原始值。
● 如果操作數(shù)具有相同的類型篮奄,則將它們進行如下比較:
○ ○ String:true 僅當兩個操作數(shù)具有相同順序的相同字符時才返回。
○ ○ Number:true 僅當兩個操作數(shù)具有相同的值時才返回窟却。+0 并被 -0 視為相同的值昼丑。如果任一操作數(shù)為NaN间校,則返回 false。
○ ○ Boolean:true 僅當操作數(shù)為兩個 true 或兩個 false 時才返回 true憔足。

1胁附、a 等于 1 或 2 或 3滓彰,顯然都不行;
2揭绑、a 如果是 Boolean 值郎哭,只能轉(zhuǎn)換成 0 或 1;
3菇存、那 a 應(yīng)該是一個對象夸研,另一個值是數(shù)字,那就符合這一條判斷規(guī)則:如果兩個操作數(shù)是不同類型的依鸥,并且操作數(shù)之一是對象亥至,另一個是數(shù)字或字符串,會嘗試使用對象的 valueOf() 和 toString() 方法將對象轉(zhuǎn)換為原始值贱迟。

var a = {}
console.log(a.valueOf()) // {}
console.log(a.toString()) // "[object Object]"

// 在這里你會發(fā)現(xiàn) a 對象的 valueOf() 和 toString() 方法都不能轉(zhuǎn)換成原始值姐扮,
// 那我們就重寫 a 對象的 valueOf() 或 toString() 方法,讓它返回原始值衣吠。
var a = {
  valueOf: function() {
    return 1;
  }
};
// 但因為是被比較了3次茶敏,所以應(yīng)該 this.value++
var a = {
  value: 1,
  valueOf: function() {
    return this.value++;
  }
};
console.log(
  a == 1 &&
  a == 2 &&
  a == 3
); // true
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市缚俏,隨后出現(xiàn)的幾起案子惊搏,更是在濱河造成了極大的恐慌,老刑警劉巖忧换,帶你破解...
    沈念sama閱讀 218,284評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件胀屿,死亡現(xiàn)場離奇詭異,居然都是意外死亡包雀,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,115評論 3 395
  • 文/潘曉璐 我一進店門亲铡,熙熙樓的掌柜王于貴愁眉苦臉地迎上來才写,“玉大人,你說我怎么就攤上這事奖蔓≡薏荩” “怎么了?”我有些...
    開封第一講書人閱讀 164,614評論 0 354
  • 文/不壞的土叔 我叫張陵吆鹤,是天一觀的道長厨疙。 經(jīng)常有香客問我,道長疑务,這世上最難降的妖魔是什么沾凄? 我笑而不...
    開封第一講書人閱讀 58,671評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮知允,結(jié)果婚禮上撒蟀,老公的妹妹穿的比我還像新娘。我一直安慰自己温鸽,他們只是感情好保屯,可當我...
    茶點故事閱讀 67,699評論 6 392
  • 文/花漫 我一把揭開白布手负。 她就那樣靜靜地躺著,像睡著了一般姑尺。 火紅的嫁衣襯著肌膚如雪竟终。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,562評論 1 305
  • 那天切蟋,我揣著相機與錄音统捶,去河邊找鬼。 笑死敦姻,一個胖子當著我的面吹牛瘾境,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播镰惦,決...
    沈念sama閱讀 40,309評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼迷守,長吁一口氣:“原來是場噩夢啊……” “哼旺入!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起茵瘾,我...
    開封第一講書人閱讀 39,223評論 0 276
  • 序言:老撾萬榮一對情侶失蹤拗秘,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后雕旨,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,668評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡棒搜,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,859評論 3 336
  • 正文 我和宋清朗相戀三年力麸,在試婚紗的時候發(fā)現(xiàn)自己被綠了育韩。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,981評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡陨舱,死狀恐怖版仔,靈堂內(nèi)的尸體忽然破棺而出误墓,到底是詐尸還是另有隱情益缎,我是刑警寧澤,帶...
    沈念sama閱讀 35,705評論 5 347
  • 正文 年R本政府宣布欣范,位于F島的核電站令哟,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏晴竞。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,310評論 3 330
  • 文/蒙蒙 一噩死、第九天 我趴在偏房一處隱蔽的房頂上張望已维。 院中可真熱鬧,春花似錦垛耳、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,904評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽甫恩。三九已至,卻和暖如春磺箕,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背松靡。 一陣腳步聲響...
    開封第一講書人閱讀 33,023評論 1 270
  • 我被黑心中介騙來泰國打工雕欺, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留棉姐,地道東北人啦逆。 一個月前我還...
    沈念sama閱讀 48,146評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像乃坤,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子湿诊,可洞房花燭夜當晚...
    茶點故事閱讀 44,933評論 2 355

推薦閱讀更多精彩內(nèi)容