JS 里的數(shù)據(jù)類型轉(zhuǎn)換

為什么要進(jìn)行數(shù)據(jù)類型轉(zhuǎn)換钟些?

首先我們知道JavaScript 是一種動(dòng)態(tài)類型語(yǔ)言,變量沒(méi)有類型限制坯认,可以隨時(shí)賦予任意值翻擒。
變量的數(shù)據(jù)類型是不確定的,但是各種運(yùn)算符對(duì)數(shù)據(jù)類型是有要求的牛哺。
如果運(yùn)算符發(fā)現(xiàn)陋气,運(yùn)算子的類型與預(yù)期不符,就會(huì)自動(dòng)轉(zhuǎn)換類型引润。(這個(gè)時(shí)候就需要各種數(shù)據(jù)類型轉(zhuǎn)換的函數(shù)巩趁,為了增加語(yǔ)言的便捷性,減少報(bào)錯(cuò))
比如淳附,減法運(yùn)算符預(yù)期左右兩側(cè)的運(yùn)算子應(yīng)該是數(shù)值议慰,如果不是蠢古,就會(huì)自動(dòng)將它們轉(zhuǎn)為數(shù)值。

一别凹、轉(zhuǎn)換為數(shù)字number

1草讶、Number()

使用 Number 函數(shù),可以將任意類型的值轉(zhuǎn)化成數(shù)值

  • 數(shù)值:轉(zhuǎn)換后還是原來(lái)的值
    例:Number(324) // 324
  • 字符串:
    如果可以被解析為數(shù)值番川,則轉(zhuǎn)換為相應(yīng)的數(shù)值
    例: Number('324') // 324
    如果不可以被解析為數(shù)值到涂,返回 NaN
    例: Number('324abc') // NaN
    空字符串轉(zhuǎn)為0
    例: Number('') // 0
  • 布爾值:true 轉(zhuǎn)成 1,false 轉(zhuǎn)成 0
    例:
    Number(true) // 1
    Number(false) // 0
  • undefined:轉(zhuǎn)成 NaN
    例: Number(undefined) // NaN
  • null:轉(zhuǎn)成0
    例: Number(null) // 0
2颁督、parseInt()
  • parseInt(string, radix)践啄,可多傳入一個(gè)參數(shù) radix(即進(jìn)制),表示傳入 string 的進(jìn)制沉御,默認(rèn)值為10屿讽,即十進(jìn)制。始終指定此參數(shù)可以消除閱讀該代碼時(shí)的困惑吠裆,并且保證轉(zhuǎn)換結(jié)果可預(yù)測(cè)伐谈。
    例:parseInt('123', 5) // 將'123'看作5進(jìn)制數(shù),返回十進(jìn)制數(shù)38 => 1*5^2 + 2*5^1 + 3*5^0 = 38
  • 區(qū)別:Number() 遇到不能無(wú)法轉(zhuǎn)成數(shù)值的字符時(shí)试疙,會(huì)直接轉(zhuǎn)換為NaN诵棵,而parseInt()逐個(gè)解析字符,直到遇到可轉(zhuǎn)換的字符祝旷。
    例:parseInt("FXX12", 10) //返回12
  • 當(dāng)然履澳,如果parseInt 遇到了不屬于radix參數(shù)所指定的基數(shù)中的字符,那么該字符和其后的字符都將被忽略。接著返回已經(jīng)解析的整數(shù)部分怀跛。
    例1:parseInt("FXX12XX", 10) // 返回12
    例2:parseInt("546", 2); // 返回NaN距贷,除了“0、1”外吻谋,其它數(shù)字都不是有效二進(jìn)制數(shù)字
3忠蝗、parseFloat()
  • parseFloat() 函數(shù)解析一個(gè)字符串參數(shù)并返回一個(gè)浮點(diǎn)數(shù)。
    parseFloat("3.14"); // 返回3.14
  • 如果在解析過(guò)程中遇到了正負(fù)號(hào)(+或-),數(shù)字(0-9),小數(shù)點(diǎn),或者科學(xué)記數(shù)法中的指數(shù)(e或E)以外的字符,則它會(huì)忽略該字符以及之后的所有字符,返回當(dāng)前已經(jīng)解析到的浮點(diǎn)數(shù).
    parseFloat("314e-2")// 返回3.14;
  • 如果參數(shù)字符串的第一個(gè)字符不能被解析成為數(shù)字,則parseFloat返回NaN漓拾。
    parseFloat("FF2")// 返回 NaN
4阁最、黑科技

‘x’ - 0+‘x’,這兩種方法等價(jià)于Number()函數(shù)(因?yàn)檫@種操作會(huì)在內(nèi)部隱性調(diào)用Number())骇两,x不能包含非數(shù)字的字符串闽撤。
注意:null轉(zhuǎn)為數(shù)值時(shí)為0,而undefined轉(zhuǎn)為數(shù)值時(shí)為NaN脯颜。
null + 1 // 1
undefined + 1 // NaN

二、轉(zhuǎn)換為字符串string

1贩据、string()

String函數(shù)可以將任意類型的值轉(zhuǎn)化成字符串栋操。

  • 數(shù)值:轉(zhuǎn)為相應(yīng)的字符串闸餐。
    String(123) // "123"
  • 字符串:轉(zhuǎn)換后還是原來(lái)的值。
    String('abc') // "abc"
  • 布爾值:true轉(zhuǎn)為字符串"true"矾芙,false轉(zhuǎn)為字符串"false"舍沙。
    String(true) // "true"
  • undefined:轉(zhuǎn)為字符串"undefined"。
    String(undefined) // "undefined"
  • null:轉(zhuǎn)為字符串"null"剔宪。
    String(null) // "null"
  • String方法的參數(shù)如果是對(duì)象拂铡,返回一個(gè)類型字符串;如果是數(shù)組葱绒,返回該數(shù)組的字符串形式感帅。
    String({a: 1}) // "[object Object]"
    String([1, 2, 3]) // "1,2,3"
2、toString() 方法
  • .toString()可以將所有的的數(shù)據(jù)都轉(zhuǎn)換為字符串地淀,但是不能轉(zhuǎn)換 null 和 undefined
  • .toString()括號(hào)中的可以寫傳入一個(gè)參數(shù) radix失球,代表進(jìn)制,對(duì)應(yīng)進(jìn)制字符串(默認(rèn)是10)帮毁,string() 則不行
var t = 8;
t.toString(2);  //1000

需要注意的是不要寫成:
1.toString(); //JS會(huì)報(bào)錯(cuò)(Uncaught SyntaxError: Invalid or unexpected token)
因?yàn)閖s會(huì)將1后面的點(diǎn) . 當(dāng)成是小數(shù)點(diǎn)实苞,在js眼中就是這樣的,自然會(huì)報(bào)錯(cuò)

1
.toString() 

可以寫成
(1).toString();//1 加上括號(hào)就可避免這樣的問(wèn)題
或者 1..toString();

3烈疚、黑科技:+ ‘’, JavaScript 遇到預(yù)期為字符串的地方黔牵,就會(huì)將非字符串的值自動(dòng)轉(zhuǎn)為字符串。

三爷肝、轉(zhuǎn)換為布爾值boolean

1猾浦、Boolean函數(shù)可以將任意類型的值轉(zhuǎn)為布爾值。

除了以下五個(gè)值的轉(zhuǎn)換結(jié)果為false阶剑,其他的值全部為true跃巡,這五個(gè)值稱之為 falsy 值。

  • undefined
  • null
  • -0或+0
  • NaN
  • ''(空字符串)

Tips:所有對(duì)象(包括空對(duì)象)的轉(zhuǎn)換結(jié)果都是true牧愁,甚至連false對(duì)應(yīng)的布爾對(duì)象new Boolean(false)也是true

2素邪、黑科技
  • !! ‘x’:兩次取反,內(nèi)部調(diào)用的也是Boolean函數(shù)
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末猪半,一起剝皮案震驚了整個(gè)濱河市兔朦,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌磨确,老刑警劉巖沽甥,帶你破解...
    沈念sama閱讀 221,695評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異乏奥,居然都是意外死亡摆舟,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,569評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)恨诱,“玉大人媳瞪,你說(shuō)我怎么就攤上這事≌毡Γ” “怎么了蛇受?”我有些...
    開封第一講書人閱讀 168,130評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)厕鹃。 經(jīng)常有香客問(wèn)我兢仰,道長(zhǎng),這世上最難降的妖魔是什么剂碴? 我笑而不...
    開封第一講書人閱讀 59,648評(píng)論 1 297
  • 正文 為了忘掉前任把将,我火速辦了婚禮,結(jié)果婚禮上汗茄,老公的妹妹穿的比我還像新娘秸弛。我一直安慰自己,他們只是感情好洪碳,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,655評(píng)論 6 397
  • 文/花漫 我一把揭開白布递览。 她就那樣靜靜地躺著,像睡著了一般瞳腌。 火紅的嫁衣襯著肌膚如雪绞铃。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,268評(píng)論 1 309
  • 那天嫂侍,我揣著相機(jī)與錄音儿捧,去河邊找鬼。 笑死挑宠,一個(gè)胖子當(dāng)著我的面吹牛菲盾,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播各淀,決...
    沈念sama閱讀 40,835評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼懒鉴,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了碎浇?” 一聲冷哼從身側(cè)響起临谱,我...
    開封第一講書人閱讀 39,740評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎奴璃,沒(méi)想到半個(gè)月后悉默,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,286評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡苟穆,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,375評(píng)論 3 340
  • 正文 我和宋清朗相戀三年抄课,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了唱星。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,505評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡剖膳,死狀恐怖魏颓,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情吱晒,我是刑警寧澤,帶...
    沈念sama閱讀 36,185評(píng)論 5 350
  • 正文 年R本政府宣布沦童,位于F島的核電站仑濒,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏偷遗。R本人自食惡果不足惜墩瞳,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,873評(píng)論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望氏豌。 院中可真熱鬧喉酌,春花似錦、人聲如沸泵喘。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,357評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)纪铺。三九已至相速,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間鲜锚,已是汗流浹背突诬。 一陣腳步聲響...
    開封第一講書人閱讀 33,466評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留芜繁,地道東北人旺隙。 一個(gè)月前我還...
    沈念sama閱讀 48,921評(píng)論 3 376
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像骏令,于是被迫代替她去往敵國(guó)和親蔬捷。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,515評(píng)論 2 359

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

  • 第2章 基本語(yǔ)法 2.1 概述 基本句法和變量 語(yǔ)句 JavaScript程序的執(zhí)行單位為行(line)伏社,也就是一...
    悟名先生閱讀 4,151評(píng)論 0 13
  • 前言:之前的博客介紹了JS中的各種數(shù)據(jù)類型抠刺,那么可不可以把已經(jīng)確定的數(shù)據(jù)類型轉(zhuǎn)換成其他的數(shù)據(jù)類型呢?本文就將介紹一...
    EnochQin閱讀 594評(píng)論 0 3
  • 數(shù)據(jù)類型的轉(zhuǎn)換可分為強(qiáng)制轉(zhuǎn)換和自動(dòng)轉(zhuǎn)換摘昌。 強(qiáng)制轉(zhuǎn)換 強(qiáng)制轉(zhuǎn)換主要指使用Number速妖、String和Boolean三...
    饑人谷_sunny閱讀 247評(píng)論 0 0
  • 內(nèi)容: 類型轉(zhuǎn)換 五個(gè)falsy值 內(nèi)存圖 垃圾回收 深淺拷貝 強(qiáng)制轉(zhuǎn)換 一. 任意類型轉(zhuǎn)Number 五種...
    加油吧_閱讀 146評(píng)論 0 0
  • 一切皆文件幾乎把所有的資源系統(tǒng)抽象為文件形式:包括硬件設(shè)備,甚至通信接口等 由眾多功能單一的程序組成:一個(gè)程序只做...
    香吉矢閱讀 232評(píng)論 0 0