類型轉(zhuǎn)換

強(qiáng)制轉(zhuǎn)換

轉(zhuǎn)換成String

1、ToString

var num = 1;
var boo1 = false;
var arr = [1, 2, 3];
var obj = {};
var fn = function () {console.log("我是fn")};
var un1 = undefined;
var nu1 = null;

console.log(num.toString()); // 1
console.log(boo1.toString()); // false
console.log(arr.toString()); // 1,2,3
console.log(obj.toString()); // [object Object]
console.log(fn.toString()); // function () {console.log("我是fn")}
console.log(un1.toString()); // Uncaught TypeError: Cannot read property 'toString' of undefined
console.log(nu1.toString()); // Uncaught TypeError: Cannot read property 'toString' of null

null和undefined這兩個(gè)值沒有toString()方法叶沛,如果調(diào)用他們的方法惰赋,會(huì)報(bào)錯(cuò)

2、String

var num = 1;
var boo1 = false;
var arr = [1, 2, 3];
var obj = {};
var fn = function () {console.log("我是fn")};
var un1 = undefined;
var nu1 = null;

console.log(String(num)); // 1
console.log(String(boo1)); // false
console.log(String(arr)); // 1,2,3
console.log(String(obj)); // [object Object]
console.log(String(fn)); // function () {console.log("我是fn")}
console.log(String(un1)); // Uncaught TypeError: Cannot read property 'toString' of undefined
console.log(String(nu1)); // Uncaught TypeError: Cannot read property 'toString' of null

使用String()函數(shù)做強(qiáng)制類型轉(zhuǎn)換時(shí)蕴侧,對(duì)于Number和Boolean實(shí)際上就是調(diào)用的toString()方法择同,但是對(duì)于null和undefined,就不會(huì)調(diào)用toString()方法净宵。它會(huì)將 null 直接轉(zhuǎn)換為 "null"敲才,將 undefined 直接轉(zhuǎn)換為 "undefined"

轉(zhuǎn)換成數(shù)字

Number

var un = undefined;
var nu = null;
var str1 = '';
var str2 = '34';
var str3 = '34px';
var str4 = 'hello';
var boo1 = false;
var boo2 = true;
var arr1 = [];
var arr2 = [34];
var arr3 = [34, 55];
var obj1 = {}
var fn = function(){return 21}
var date = new Date()
console.log(Number(un)) // Nan
console.log(Number(nu)) // 0
console.log(Number(str1)) // 0
console.log(Number(str2)) // 34
console.log(Number(str3)) // NAN
console.log(Number(str4)) // NAN
console.log(Number(boo1)) // 0
console.log(Number(boo2)) // 1
console.log(Number(arr1)) // 0
console.log(Number(arr2)) // 34
console.log(Number(arr3)) // NAN
console.log(Number(obj1)) // NAN
console.log(Number(fn)) // NAN
console.log(Number(date)) // 1554639507784

parseInt

var un = undefined;
var nu = null;
var str1 = '';
var str2 = '34';
var str3 = '34px';
var str4 = 'hello';
var num1 = 22.22;
var boo1 = false;
var boo2 = true;
var arr1 = [];
var arr2 = [34];
var arr3 = [34, 55];
var obj1 = {}
var fn = function(){return 21}
var date = new Date()
console.log(parseInt(un)) // Nan
console.log(parseInt(nu)) // NAN
console.log(parseInt(str1)) // NAN
console.log(parseInt(str2)) // 34
console.log(parseInt(str3)) // 34
console.log(parseInt(str4)) // NAN
console.log(parseInt(num1)) // 22
console.log(parseInt(boo1)) // NAN
console.log(parseInt(boo2)) // NAN
console.log(parseInt(arr1)) // NAN
console.log(parseInt(arr2)) // 34
console.log(parseInt(arr3)) // 34
console.log(parseInt(obj1)) // NAN
console.log(parseInt(fn)) // NAN
console.log(parseInt(date)) // NAN

parseFloat

var un = undefined;
var nu = null;
var str1 = '';
var str2 = '34';
var str3 = '34px';
var str4 = 'hello';
var num1 = 22.22;
var boo1 = false;
var boo2 = true;
var arr1 = [];
var arr2 = [34];
var arr3 = [34, 55];
var obj1 = {}
var fn = function(){return 21}
var date = new Date()
console.log(parseFloat(un)) // Nan
console.log(parseFloat(nu)) // NAN
console.log(parseFloat(str1)) // NAN
console.log(parseFloat(str2)) // 34
console.log(parseFloat(str3)) // 34
console.log(parseFloat(str4)) // NAN
console.log(parseFloat(num1)) // 22.22
console.log(parseFloat(boo1)) // NAN
console.log(parseFloat(boo2)) // NAN
console.log(parseFloat(arr1)) // NAN
console.log(parseFloat(arr2)) // 34
console.log(parseFloat(arr3)) // 34
console.log(parseFloat(obj1)) // NAN
console.log(parseFloat(fn)) // NAN
console.log(parseFloat(date)) // NAN

隱式轉(zhuǎn)換

轉(zhuǎn)換成字符串

+號(hào)運(yùn)算符

1 轉(zhuǎn)換規(guī)則

  • 如果兩個(gè)操作值都是字符串裹纳,則將它們拼接起來
  • 如果只有一個(gè)操作值為字符串,則將另外操作值轉(zhuǎn)換為字符串紧武,然后拼接起來
  • 如果一個(gè)操作數(shù)是對(duì)象剃氧、數(shù)值或者布爾值,則調(diào)用toString()方法取得字符串值阻星,然后再應(yīng)用前面的字符串規(guī)則朋鞍。對(duì)于undefined和null,分別調(diào)用String()顯式轉(zhuǎn)換為字符串妥箕。
var str1 = '1' + undefined
var str2 = '1' + null
var str3 = '1' + '1'
var str4 = '1' + true
var str5 = '1' + 1
var str6 = '1' + {}
var str7 = '1' + []
var str8 = '1' + [1]
var str9 = '1' + [1, 2]
var str10 = '1' + function(){console.log(1)}

var str11 = 1 + {}
var str12 = 1 + []
var str13 = 1 + [1]
var str14 = 1 + [1, 2]
var str15 = 1 + function(){console.log(1)}
console.log(str6, typeof str6) // 1[object Object] string
console.log(str7, typeof str7) // 1 string
console.log(str8, typeof str8) // 11 string
console.log(str9, typeof str9) // 11,2 string
console.log(str10, typeof str10) // 1function(){console.log(1)} string
console.log(str1, typeof str1) // 1undefined string
console.log(str2, typeof str2) // 1null string
console.log(str3, typeof str3) // 11 string
console.log(str4, typeof str4) // 1true string
console.log(str5, typeof str5) // 11 string
console.log(str6, typeof str6) // 1[object Object] string
console.log(str7, typeof str7) // 1 string
console.log(str8, typeof str8) // 11 string
console.log(str9, typeof str9) // 11,2 string
console.log(str10, typeof str10) // 1function(){console.log(1)} string
console.log(str11, typeof str11) // 1[object Object] string
console.log(str12, typeof str12) // 1 string
console.log(str13, typeof str13) // 11 string
console.log(str14, typeof str14) // 11,2 string
console.log(str15, typeof str15) // 1function(){console.log(1)} string

轉(zhuǎn)換成數(shù)字

+號(hào)運(yùn)算符

1 轉(zhuǎn)換規(guī)則
如果兩個(gè)操作值都是數(shù)值

  • 如果一個(gè)操作數(shù)為NaN滥酥,則結(jié)果為NaN
  • 如果是Infinity+Infinity,結(jié)果是Infinity
  • 如果是-Infinity+(-Infinity)畦幢,結(jié)果是-Infinity
  • 如果是Infinity+(-Infinity)坎吻,結(jié)果是NaN
  • 如果是+0+(+0),結(jié)果為+0
  • 如果是(-0)+(-0)宇葱,結(jié)果為-0
  • 如果是(+0)+(-0)瘦真,結(jié)果為+0
var num1 = 1 + undefined
var num2 = 1 + null
var num3 = 1 + '1'
var num4 = 1 + true
var num5 = 1 + 1
var num6 = 1 + NaN
var num7 = Infinity + Infinity
var num8 = -Infinity + -Infinity
var num9 = Infinity + -Infinity
var num10 = 0 + 0
var num11 = -0 + -0
var num12 = 0 + -0

console.log(num1, typeof num1) // NaN "number"
console.log(num2, typeof num2) // 1 "number"
console.log(num3, typeof num3) // 11 string
console.log(num4, typeof num4) // 2 "number"
console.log(num5, typeof num5) // 2 "number"
console.log(num6, typeof num6) // NaN "number"
console.log(num7, typeof num7) // Infinity "number"
console.log(num8, typeof num8) // -Infinity "number"
console.log(num9, typeof num9) // NaN "number"
console.log(num10, typeof num10) // 0 "number"
console.log(num11, typeof num11) // -0 "number"
console.log(num12, typeof num12) // 0 "number"

乘除、減號(hào)運(yùn)算符贝搁、取模運(yùn)算符

這些操作符針對(duì)的是運(yùn)算吗氏,所以他們具有共同性:如果操作值之一不是數(shù)值,則被隱式調(diào)用Number()函數(shù)進(jìn)行轉(zhuǎn)換雷逆。

轉(zhuǎn)換成布爾值

1弦讽、轉(zhuǎn)換規(guī)則
1.1 若類型相同
1.2 若類型不相同

  • undefined、null相等
  • boolean膀哲、string往产、number之間相比,會(huì)轉(zhuǎn)換成Nunber
  • boolean某宪、string仿村、number和對(duì)象相比,對(duì)象會(huì)轉(zhuǎn)換成基本類型兴喂,再進(jìn)行對(duì)比

2蔼囊、轉(zhuǎn)換成布爾值的運(yùn)算符類型

  • if (..) 語(yǔ)句中的條件判斷表達(dá)式。
  • for ( .. ; .. ; .. ) 語(yǔ)句中的條件判斷表達(dá)式(第二個(gè))衣迷。
  • while (..) 和 do..while(..) 循環(huán)中的條件判斷表達(dá)式
  • ? : 中的條件判斷表達(dá)式畏鼓。
  • 邏輯運(yùn)算符 || (邏輯或)和 && (邏輯與)左邊的操作數(shù)(作為條件判斷表達(dá)式)
  • 寬松相等和嚴(yán)格相等:“ == 允許在相等比較中進(jìn)行強(qiáng)制類型轉(zhuǎn)換,而 === 不允許壶谒。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末云矫,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子汗菜,更是在濱河造成了極大的恐慌让禀,老刑警劉巖挑社,帶你破解...
    沈念sama閱讀 219,490評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異巡揍,居然都是意外死亡痛阻,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,581評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門吼肥,熙熙樓的掌柜王于貴愁眉苦臉地迎上來录平,“玉大人,你說我怎么就攤上這事缀皱《氛猓” “怎么了?”我有些...
    開封第一講書人閱讀 165,830評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵啤斗,是天一觀的道長(zhǎng)表箭。 經(jīng)常有香客問我,道長(zhǎng)钮莲,這世上最難降的妖魔是什么免钻? 我笑而不...
    開封第一講書人閱讀 58,957評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮崔拥,結(jié)果婚禮上极舔,老公的妹妹穿的比我還像新娘。我一直安慰自己链瓦,他們只是感情好拆魏,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,974評(píng)論 6 393
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著慈俯,像睡著了一般渤刃。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上贴膘,一...
    開封第一講書人閱讀 51,754評(píng)論 1 307
  • 那天卖子,我揣著相機(jī)與錄音,去河邊找鬼刑峡。 笑死洋闽,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的突梦。 我是一名探鬼主播诫舅,決...
    沈念sama閱讀 40,464評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼阳似!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起铐伴,我...
    開封第一講書人閱讀 39,357評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤撮奏,失蹤者是張志新(化名)和其女友劉穎俏讹,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體畜吊,經(jīng)...
    沈念sama閱讀 45,847評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡泽疆,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,995評(píng)論 3 338
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了玲献。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片殉疼。...
    茶點(diǎn)故事閱讀 40,137評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖捌年,靈堂內(nèi)的尸體忽然破棺而出瓢娜,到底是詐尸還是另有隱情,我是刑警寧澤礼预,帶...
    沈念sama閱讀 35,819評(píng)論 5 346
  • 正文 年R本政府宣布眠砾,位于F島的核電站,受9級(jí)特大地震影響托酸,放射性物質(zhì)發(fā)生泄漏褒颈。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,482評(píng)論 3 331
  • 文/蒙蒙 一励堡、第九天 我趴在偏房一處隱蔽的房頂上張望谷丸。 院中可真熱鬧,春花似錦应结、人聲如沸刨疼。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,023評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)币狠。三九已至,卻和暖如春砾层,著一層夾襖步出監(jiān)牢的瞬間漩绵,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,149評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工肛炮, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留止吐,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,409評(píng)論 3 373
  • 正文 我出身青樓侨糟,卻偏偏與公主長(zhǎng)得像碍扔,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子秕重,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,086評(píng)論 2 355

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