js類型轉(zhuǎn)換

記錄一些常見的坑

js中的6個(gè)假值

false, null, undefined, 0, NaN, ''

https://www.jb51.net/article/122992.htm

隱式類型轉(zhuǎn)換規(guī)則

ToPrimitive對(duì)原始類型不發(fā)生轉(zhuǎn)換處理箱季,只針對(duì)引用類型(object)的,其目的是將引用類型(object)轉(zhuǎn)換為非對(duì)象類型拷况,也就是原始類型掘殴。

ToPrimitive 運(yùn)算符接受一個(gè)值,和一個(gè)可選的 期望類型作參數(shù)起意。ToPrimitive 運(yùn)算符將值轉(zhuǎn)換為非對(duì)象類型揽咕,如果對(duì)象有能力被轉(zhuǎn)換為不止一種原語類型套菜,可以使用可選的 期望類型 來暗示那個(gè)類型

/**
* @obj 需要轉(zhuǎn)換的對(duì)象
* @type 期望轉(zhuǎn)換為的原始數(shù)據(jù)類型,可選
*/
ToPrimitive(obj,type)

type不同值的說明

type為string:

先調(diào)用obj的toString方法逗爹,如果為原始值,則return挟冠,否則第2步調(diào)用obj的valueOf方法,如果為原始值知染,則return斑胜,否則第3步拋出TypeError 異常

type為number:

調(diào)用obj的valueOf方法止潘,如果為原始值,則返回凭戴,否則下第2步調(diào)用obj的toString方法,如果為原始值者冤,則return档痪,否則第3步拋出TypeError 異常

type參數(shù)為空)

該對(duì)象為Date,則type被設(shè)置為String 否則腐螟,type被設(shè)置為Number
為空時(shí),date類型的先調(diào)用toString(),其他引用類型先調(diào)用valueOf()

總結(jié)

  • 比較運(yùn)算符中尼桶,兩邊都會(huì)轉(zhuǎn)為number類型

  • +運(yùn)算時(shí)泵督,若包含引用類型庶喜,則轉(zhuǎn)為字符串類型

  • +-開頭的一元運(yùn)算法久窟,會(huì)轉(zhuǎn)為number類型,undefined會(huì)轉(zhuǎn)為NaN

驗(yàn)證

// ### 含有引用類型
1+{} // "1[object Object]"
{}+1 // 1入问,前面的{}被當(dāng)作空代碼塊芬失,若為表達(dá)式,則轉(zhuǎn)為[object Object]
1+[] // "1"

// ### 比較
[] == false // '' == false -> 0 == 0
[] == ![] // '' == false -> 0 == 0
false == undefined // 0 == NaN

// 特例
null == undefined //true

### +, -
+{} // NaN
-'123' // -123
+true // 1

對(duì)象的valueOf和toString

var obj = {
    toString: function() {
        return "a"
    },
    valueOf: function() {
        return "b"
    }
}
//先調(diào)用valueOf,若返回原始類型租漂,則返回
//若只重寫toString方法颊糜,則直接調(diào)用toString
console.log(1 + obj) //"1b"

Date對(duì)象的特別說明

var d = new Date()

console.log(d == d.toString()) // toString() == Sat Nov 16 2019 23:24:45 GMT+0800
console.log(d == d.valueOf) // valueOf() == 1573917885718

console.log(d - 1) // 1573917989664

測試

[] == ![] //true
NaN !== NaN //true
null == undefined //true
 
1 == true //true
2 == true //false
"2" == true //false
 
null > 0 //false
null < 0  //false
null == 0  //true
null >= 0 //true
 

true + 1 //2
undefined + 1 //NaN 
 
let obj = {};
 
// 代碼塊
{} + 1 // 1
{ 1 + 1 } + 1 //1
 
// 表達(dá)式
obj + 1 //[object Object]1
{} + {} //chrome [object Object][object Object], fireFox NaN
 
[] + {} //[object Object]
[] + obj //[object Object]
+ [] //0
{} + [] //0
obj + [] [object Object]
 
[2,3] + [1,2] //"2312"
[2] + 1 //"21"
[2] + (-1) //"2-1"
 

[2] - 1 //1
[2,3] - 1 //NaN
{} - 1 //-1
1-{} //NaN
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末业筏,一起剝皮案震驚了整個(gè)濱河市馁启,隨后出現(xiàn)的幾起案子芍秆,更是在濱河造成了極大的恐慌,老刑警劉巖妖啥,帶你破解...
    沈念sama閱讀 212,454評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件荆虱,死亡現(xiàn)場離奇詭異,居然都是意外死亡诉位,警方通過查閱死者的電腦和手機(jī)菜枷,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,553評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門啤誊,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人瞳筏,你說我怎么就攤上這事牡昆。” “怎么了?”我有些...
    開封第一講書人閱讀 157,921評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵凄硼,是天一觀的道長摊沉。 經(jīng)常有香客問我,道長说墨,這世上最難降的妖魔是什么尼斧? 我笑而不...
    開封第一講書人閱讀 56,648評(píng)論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上蛔六,老公的妹妹穿的比我還像新娘。我一直安慰自己崎逃,他們只是感情好缚柏,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,770評(píng)論 6 386
  • 文/花漫 我一把揭開白布币喧。 她就那樣靜靜地躺著杀餐,像睡著了一般朱巨。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上蔬崩,一...
    開封第一講書人閱讀 49,950評(píng)論 1 291
  • 那天沥阳,我揣著相機(jī)與錄音,去河邊找鬼脉让。 笑死,一個(gè)胖子當(dāng)著我的面吹牛溅潜,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播粗仓,決...
    沈念sama閱讀 39,090評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼借浊,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼萝招!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起曙蒸,我...
    開封第一講書人閱讀 37,817評(píng)論 0 268
  • 序言:老撾萬榮一對(duì)情侶失蹤纽窟,失蹤者是張志新(化名)和其女友劉穎凹嘲,沒想到半個(gè)月后周蹭,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,275評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡凶朗,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,592評(píng)論 2 327
  • 正文 我和宋清朗相戀三年棚愤,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了杂数。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,724評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖那伐,靈堂內(nèi)的尸體忽然破棺而出踏施,到底是詐尸還是另有隱情,我是刑警寧澤养距,帶...
    沈念sama閱讀 34,409評(píng)論 4 333
  • 正文 年R本政府宣布棍厌,位于F島的核電站竖席,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏揣炕。R本人自食惡果不足惜东跪,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,052評(píng)論 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望丁恭。 院中可真熱鬧斋日,春花似錦、人聲如沸恶守。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,815評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽飒赃。三九已至科侈,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間蔫慧,已是汗流浹背挂脑。 一陣腳步聲響...
    開封第一講書人閱讀 32,043評(píng)論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留威蕉,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,503評(píng)論 2 361
  • 正文 我出身青樓橄仍,卻偏偏與公主長得像韧涨,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子侮繁,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,627評(píng)論 2 350

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

  • 寫在前面的話 近期刷了點(diǎn)js的面試題虑粥,發(fā)現(xiàn)很多基礎(chǔ)知識(shí)已經(jīng)模糊,于是重新回去看了一下《javascript權(quán)威指南...
    栗子酥小小閱讀 780評(píng)論 0 0
  • 原文 有意思的 JavaScript 原始值到原始值的轉(zhuǎn)換 原始值轉(zhuǎn)化為布爾值所有的假值(undefined宪哩、nu...
    蠻吉大人123閱讀 281評(píng)論 0 0
  • javaScript類型轉(zhuǎn)換 標(biāo)簽(空格分隔): 未分類 隱式轉(zhuǎn)換 當(dāng)遇到以下幾種情況娩贷,JavaScript會(huì)自動(dòng)...
    時(shí)修七年閱讀 396評(píng)論 0 0
  • 本文是lhyt本人原創(chuàng),希望用通俗易懂的方法來理解一些細(xì)節(jié)和難點(diǎn)锁孟。轉(zhuǎn)載時(shí)請(qǐng)注明出處彬祖。文章最早出現(xiàn)于本人github...
    lhyt閱讀 309評(píng)論 0 1
  • 司命和疊風(fēng)走后,鳳九和少綰各執(zhí)一封請(qǐng)柬品抽,回了狐貍洞中储笑,坐到了石桌邊,氣氛有些微妙圆恤,有些不自然突倍,熟知內(nèi)情的人,都會(huì)認(rèn)...
    轉(zhuǎn)角花開閱讀 2,943評(píng)論 2 32