飯后閑談——JavaScript的數(shù)據(jù)類型與轉(zhuǎn)換

JavaScript包括ECMAScript家卖、DOM和BOM三部分眨层。而ECMAScript當(dāng)中一共包括6種數(shù)據(jù)類型:Undefined、Null上荡、Boolean趴樱、Number、String酪捡、Object. ?

這6中數(shù)據(jù)類型可分為兩大類:值類型與引用類型叁征。object屬于引用類型,其余的則屬于值類型沛善。

值類型特點(diǎn):是按值訪問(wèn)的航揉,你可以操作保存在變量中的實(shí)際的值

引用類型特點(diǎn):是屬性和方法的集合,擁有屬性和方法金刁。

那知道這些帅涂,好像還是不怎么了解這些具體的每一個(gè)數(shù)據(jù)類型,那我們就“沏上一壺茶“慢慢揭開它的面紗尤蛮。

慢慢聊

1.Undefined——它僅有一個(gè)值媳友,那就是undefined。

1)當(dāng)一個(gè)變量有聲明但沒有賦值時(shí)产捞,這個(gè)變量的值就是undefined醇锚;

? ? ? ?var test;

? ? ? ?console.log(test== undefined); ? ? ? ?//true

2)函數(shù)的默認(rèn)返回值也是為undefined。

2.Null——它僅有一個(gè)值,那就是null焊唬。

Null在邏輯上表示的是一個(gè)空的對(duì)象恋昼,這可以使用typeof這個(gè)操作符來(lái)檢查,如:

? ? ? var ?box = null赶促;

? ? ?console.log(typeofbox); ? ? ? ? ?//object

何時(shí)使用null呢:當(dāng)我們定義了一個(gè)變量液肌,準(zhǔn)備用它來(lái)保存一個(gè)對(duì)象,那么此時(shí)我們最好是將其初始化為null鸥滨。

3.Boolean——它有2個(gè)值嗦哆,true和false。

注意哦:這里的布爾值是區(qū)分大小寫的婿滓,即True與False是標(biāo)識(shí)符老速,不是布爾值。

ECMAScript中所有的數(shù)據(jù)類型的值都能等價(jià)于Boolean的值凸主,將一個(gè)數(shù)值轉(zhuǎn)換成對(duì)應(yīng)的Boolean值橘券,可調(diào)用轉(zhuǎn)型函數(shù)Boolean( ); 例:

? ? ? var test = “一念成mo”;

? ? ? var testBoolean = Boolean(test); ? ? ? ? // true

那關(guān)于各數(shù)據(jù)類型與Boolean之間的轉(zhuǎn)換,我們?cè)诮榻B完這些類型之后統(tǒng)一給出秕铛。

4.Number——分為3種不同類型:整數(shù)int约郁、浮點(diǎn)數(shù)float缩挑、NaN

1)整數(shù):應(yīng)該都很好理解但两,那在嚴(yán)格模式下,統(tǒng)一使用十進(jìn)制表示供置。

2)浮點(diǎn)值:就是指數(shù)值中包含小數(shù)點(diǎn)谨湘,并且小數(shù)點(diǎn)后面必須至少一位數(shù)字,雖然小數(shù)點(diǎn)前面可以設(shè)置沒有整數(shù)芥丧,但不推薦這種寫法紧阔。

? ? ? var ?floatNum = 1.1;

? ? ? var ?floatNum = ?.1; ? ? ? ?//有效,但不推薦

由于保存浮點(diǎn)數(shù)值的內(nèi)容空間是整數(shù)的2倍耶续担!所以當(dāng)遇到這種情況如(1.0)擅耽,該數(shù)值將會(huì)自動(dòng)地被轉(zhuǎn)成整數(shù)型。

? ? ? var ?floatNum = 1; ? ? ? ? // 1

? ? ? var ?floatNum = 1.0; ? ? ?// 1

同時(shí)數(shù)值是有使用范圍的:最大1.7976931348623157e+308物遇,最小5e-324乖仇;若超過(guò)這個(gè)范圍則會(huì)變成正無(wú)窮與負(fù)無(wú)窮(Infinity)。

3)NaN:是一個(gè)很特殊的值询兴,它是Not a Number的意思乃沙,即非數(shù)字。表示一個(gè)本來(lái)要返回?cái)?shù)值的操作數(shù)未返回?cái)?shù)值的情況诗舰。例如:任何數(shù)除以0就會(huì)返回NaN警儒,但它是不會(huì)影響代碼的。

它有2個(gè)不平凡的特點(diǎn):1.任何與NaN的操作都會(huì)返回NaN眶根。2.NaN與任何值都不相等蜀铲,包括NaN本身边琉。

? ? ? console.log(NaN == NaN); ? ? ? ?//false

針對(duì)這兩個(gè)本身特點(diǎn),ECMAScript定義了isNaN( )這個(gè)函數(shù)记劝,來(lái)檢查某個(gè)參數(shù)是否為“不是一個(gè)數(shù)值”艺骂。例;

? ? ? console.log(isNaN(NaN)); ? ? ? // true ? ? ?此處true的含義是:NaN不是一個(gè)數(shù)。

? ? ? console.log(isNaN(10)); ? ? ? ? //true ? ? ? 此處true的含義是:10是一個(gè)數(shù)隆夯。

5.String——用于表示0或多個(gè)16位Unicode字符組成的字符串钳恕,需要用雙引號(hào)或單引號(hào)表示。

? ? ? var ?str = “1010”;

? ? ? var ?str = “一念成mo”;

6.Object——對(duì)象蹄衷,即一組數(shù)據(jù)與功能的集合忧额。

? ? ? var ?obj = {};


聊完這6種數(shù)據(jù)類型的基本情況后,我們來(lái)說(shuō)說(shuō)另外4個(gè)復(fù)雜的故事愧口。

首先我們要知道JavaScript是弱變量類型的語(yǔ)言睦番。有些時(shí)候我們需要知道變量的數(shù)據(jù)類型,因?yàn)槲覀儤O可能需要進(jìn)行數(shù)據(jù)類型的轉(zhuǎn)換耍属。

故事一:各數(shù)據(jù)類型轉(zhuǎn)換成Boolean值

各數(shù)據(jù)類型轉(zhuǎn)換成Boolean值

我想再給大家分享一個(gè)英文English版的故事一托嚣,也是很不錯(cuò)的。

1. Undefined and null are always false.

2. Booleans are just treated as booleans (obviously).

3. Numbers are false if they equal 0 or NaN; otherwise, they’re true.

4. Strings are true, except for the empty string "", which is false.

5. Objects are always true.


故事二:各數(shù)據(jù)類型轉(zhuǎn)換為數(shù)值(Number)

顯性轉(zhuǎn)換使用:Number( )厚骗、parseInt(?)與parseFloat( )示启。

Number(?)函數(shù)的轉(zhuǎn)換規(guī)則:

1.Boolean值,true和false轉(zhuǎn)換就是1和0领舰。? var num = Number(true); ? ? ?// 1

2.數(shù)值本身夫嗓,則只是簡(jiǎn)單的傳入和返回。? var num = Number(10); ? ? ? // 10

3.Null值冲秽,返回0. ? ? var num = Number(null); ? ? ? ?// 0

4.1 空字符串舍咖,返回0. ? ? ? var num = Number(" "); ? ? // 0

4.2 浮點(diǎn)格式字符串如“1.1”,會(huì)忽略小數(shù)點(diǎn)锉桑,轉(zhuǎn)為1排霉。 ? var num = Number(“1.1”); ? ?// 1

4.3如果字符串只包含數(shù)字(包括前面的正負(fù)),則轉(zhuǎn)換成十進(jìn)制如:“123”變成123民轴;”000123“變成”123“.? ? ? var num = Number(“000123”); ? ? ? // 123

4.4除了上述以外的攻柠,其他轉(zhuǎn)換成NaN。? var num = Number(“一念成mo”); ? ? ? // NaN

4.Undefined杉武,返回NaN辙诞。? var num = Number(undefined); ? ? ? ?// NaN

5.對(duì)象Object,則調(diào)用對(duì)象valueOf( )方法轻抱,如果轉(zhuǎn)換的結(jié)果是NaN飞涂,那么調(diào)用toString( )方法

parseInt()函數(shù)轉(zhuǎn)換規(guī)則

在進(jìn)行字符串的轉(zhuǎn)換中,我們更多的是使用parseInt( )。

首先较店,它會(huì)忽略字符串前面的空格士八;直到找到第一個(gè)非空格字符。

若第一個(gè)字符不是數(shù)字字符或負(fù)號(hào)梁呈,則返回NaN婚度;如果第一個(gè)是數(shù)值字符或符號(hào),將會(huì)一直找下去官卡,直到非數(shù)字字符蝗茁。

var num1 =parseInt(“123sf”) ; ? ? // 123

var num2 = parseInt(“”); ? ? ? ? ? ? // NaN

var num3 = parseInt(“0xA”); ? ? ?// 10(16進(jìn)制)

var num4 =parseInt(“22.5”); ? ? ?// 22

var num5 = parseInt(“070”); ? ? // 56(八進(jìn)制)

var num6 =parseInt(“70”); ? ? ? ?// 70

在使用parseInt()解析像八進(jìn)制字面的字符串時(shí),比如parseInt(“010”)方法在不同瀏覽器下存在兼容問(wèn)題寻咒。IE6哮翘、IE7、IE8會(huì)按照8進(jìn)制進(jìn)行轉(zhuǎn)換毛秘,解決辦法:parseInt(“010”, 10);其他的瀏覽器則會(huì)忽略前面的0變成十進(jìn)制饭寺。

parseFloat()函數(shù)轉(zhuǎn)換規(guī)則:

parseFloat( )只有第一個(gè)小數(shù)點(diǎn)有效。它和parseInt()的區(qū)別始終會(huì)忽略前面的0. parseFloat()只解析十進(jìn)制叫挟。最后還注意一點(diǎn):如果字符串包含的一個(gè)可以解析為整數(shù)的數(shù)(沒有小數(shù)點(diǎn)艰匙,或者小數(shù)點(diǎn)后面都是0),parseFloat()都會(huì)返回整數(shù)抹恳。

varnum1 = parseFloat(“1234blue”); ? ? ? ?//1234

var num2 =parseFloat(“0xA”); ? ? ? ? ? ? ? ?// 0

var num3 =parseFloat(“22.5”); ? ? ? ? ? ? ?// 22.5

var num4 =parseFloat(“22.34.5”); ? ? ? ? // 22.34

var num5 =parseFloat(“3.125e7”); ? ? ? ?// 31250000


故事三:各數(shù)據(jù)類型轉(zhuǎn)換成String值

要把一個(gè)值轉(zhuǎn)換為一個(gè)字符串可以使用toString()方法员凝,不過(guò)只有數(shù)值、布爾值适秩、對(duì)象和字符串有toString()這個(gè)方法绊序,而null和undefined沒有這個(gè)方法硕舆。我們還可以使用轉(zhuǎn)型函數(shù)String()秽荞,這個(gè)函數(shù)能夠?qū)⑷魏晤愋偷闹缔D(zhuǎn)換成字符串。

var age =11;

var ageSrting=age.toString(); ? ? ? // “11”

var obj =null;

console.log(String(obj)); ? ? ? ? ? ? // "null"

也可以將其轉(zhuǎn)換成二進(jìn)制抚官,八進(jìn)制扬跋,十六進(jìn)制:

var num = 10;

console.log(num.toString()); ? ? ? // “10”

console.log(num.toString(2)); ? ? // “1010”

console.log(num.toString(16)); ? ?// “a”


故事四:字符串與數(shù)值之間的隱式轉(zhuǎn)換

隱式轉(zhuǎn)換的方式:可以通過(guò)+""、* 1凌节、/1的運(yùn)算來(lái)把數(shù)值轉(zhuǎn)換成字符串钦听。(可相互轉(zhuǎn)換)

數(shù)字——>字符串:使用+(連字符) ? ? ? ? ? ?數(shù)字+字符串=字符串;

字符串——>數(shù)字:使用+ - * / %倍奢;

例如:

"123"-0 ? ?"123"*0 ? ?"123"/0 ? ?+"123" ? ?"123"%比前面的數(shù)值字符串大的數(shù)字

如果覺得對(duì)你有用或者有點(diǎn)小喜歡朴上,請(qǐng)收藏或轉(zhuǎn)發(fā)或評(píng)論,這也是一種打賞卒煞。么么噠~~~

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末痪宰,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌衣撬,老刑警劉巖乖订,帶你破解...
    沈念sama閱讀 207,113評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異具练,居然都是意外死亡乍构,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門扛点,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)哥遮,“玉大人,你說(shuō)我怎么就攤上這事陵究∥羯疲” “怎么了?”我有些...
    開封第一講書人閱讀 153,340評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵畔乙,是天一觀的道長(zhǎng)君仆。 經(jīng)常有香客問(wèn)我,道長(zhǎng)牲距,這世上最難降的妖魔是什么返咱? 我笑而不...
    開封第一講書人閱讀 55,449評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮牍鞠,結(jié)果婚禮上咖摹,老公的妹妹穿的比我還像新娘。我一直安慰自己难述,他們只是感情好萤晴,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,445評(píng)論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著胁后,像睡著了一般店读。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上攀芯,一...
    開封第一講書人閱讀 49,166評(píng)論 1 284
  • 那天屯断,我揣著相機(jī)與錄音,去河邊找鬼侣诺。 笑死殖演,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的年鸳。 我是一名探鬼主播趴久,決...
    沈念sama閱讀 38,442評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼搔确!你這毒婦竟也來(lái)了彼棍?” 一聲冷哼從身側(cè)響起已添,我...
    開封第一講書人閱讀 37,105評(píng)論 0 261
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎滥酥,沒想到半個(gè)月后更舞,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,601評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡坎吻,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,066評(píng)論 2 325
  • 正文 我和宋清朗相戀三年缆蝉,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片瘦真。...
    茶點(diǎn)故事閱讀 38,161評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡刊头,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出诸尽,到底是詐尸還是另有隱情原杂,我是刑警寧澤,帶...
    沈念sama閱讀 33,792評(píng)論 4 323
  • 正文 年R本政府宣布您机,位于F島的核電站穿肄,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏际看。R本人自食惡果不足惜咸产,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,351評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望仲闽。 院中可真熱鬧脑溢,春花似錦、人聲如沸赖欣。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)顶吮。三九已至社牲,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間云矫,已是汗流浹背膳沽。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評(píng)論 1 261
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留让禀,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,618評(píng)論 2 355
  • 正文 我出身青樓陨界,卻偏偏與公主長(zhǎng)得像巡揍,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子菌瘪,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,916評(píng)論 2 344

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