基本數(shù)據(jù)類型

大家好啸罢,我是IT修真院萌新分院的王寒,一枚正直加勤,純潔仙辟,善良的前端程序員。

今天給大家分享一下基本數(shù)據(jù)類型鳄梅。

1.背景介紹

JavaScript是一種弱類型或者說(shuō)動(dòng)態(tài)語(yǔ)言叠国。就是不用提前聲明變量的類型, 在程序運(yùn)行過(guò)程中戴尸,類型會(huì)被自動(dòng)確定粟焊。這也意味著你可以使用同一個(gè)變量保存不同類型的數(shù)據(jù)

2.知識(shí)剖析

js基本數(shù)據(jù)類型有哪些?

ECMAScript中有5中簡(jiǎn)單數(shù)據(jù)類型(也稱為基本數(shù)據(jù)類型): Undefined校赤、Null吆玖、Boolean筒溃、Number和String马篮。 還有1中復(fù)雜的數(shù)據(jù)類型————Object,Object本質(zhì)上是由一組無(wú)序的名值對(duì)組成的怜奖。

typeof 操作符

由于js中的變量是松散類型的浑测,所以它提供了一種檢測(cè)當(dāng)前變量的數(shù)據(jù)類型的方法,就是typeof關(guān)鍵字. 通過(guò)typeof關(guān)鍵字歪玲,對(duì)這5種數(shù)據(jù)類型會(huì)返回下面的值(以字符串形式顯示)

undefined ---------- 如果值未定義 Undefined

boolean ---------- 如果這個(gè)值是布爾值 Boolean

string ---------- 如果這個(gè)值是字符串 String

number ---------- 如果這個(gè)值是數(shù)值類型 Number

object ---------- 如果這個(gè)值是對(duì)象或null Object

需要注意的是typeof null返回為object,因?yàn)樘厥庵祅ull被認(rèn)為是一個(gè)空的對(duì)象引用迁央。

1. Undefined

Undefined類型只有一個(gè)值,即特殊的undefined滥崩。在使用var聲明變量但未對(duì)其加以初始化時(shí)岖圈,這個(gè)變量的值就是undefined

var a;

alert(a==undefined);//true

這個(gè)例子只聲明了變量a钙皮,但并沒(méi)有對(duì)它進(jìn)行初始化蜂科。比較這個(gè)變量與undefined字面量,表明它們是相等的

var a=undefined短条;

alert(a==undefined);//true

這個(gè)例子使用undefined值顯示初始化了變量a导匣,但是沒(méi)有必要這么做,因?yàn)槲唇?jīng)初始化的值默認(rèn)就會(huì)取得undefined值

不過(guò)包含undefined值的變量與未定義的變量還是不一樣的

var a=茸时;//這個(gè)變量聲明之后默認(rèn)取得了undefined值

//下面這個(gè)變量并沒(méi)有聲明

//var age

alert(a);? //"undefined"

alert(age);? //產(chǎn)生錯(cuò)誤

第一個(gè)警告框會(huì)顯示a的值贡定,即"undefined";第二個(gè)警告框因?yàn)閭鬟falert()函數(shù)的是沒(méi)有聲明的變量age所以會(huì)出現(xiàn)一個(gè)錯(cuò)誤

對(duì)沒(méi)有初始化的變量執(zhí)行typeof操作符會(huì)返回undefined值可都,而對(duì)沒(méi)有聲明的變量執(zhí)行typeof操作符也會(huì)返回undefined值

var a=缓待;//這個(gè)變量聲明之后默認(rèn)取得了undefined值

//下面這個(gè)變量并沒(méi)有聲明

//var age

alert(typeof a);? //"undefined"

alert(typeof age);? //"undefined"

2.null

Null類型是第二個(gè)只有一個(gè)值的數(shù)據(jù)類型蚓耽,這個(gè)特殊的值是null。從邏輯角度來(lái)看旋炒,null值表示一個(gè)空對(duì)象指針田晚, 而這也正是使用typeof操作符檢測(cè)null時(shí)會(huì)返回object的原因。

var car=null国葬;

alert(typeof car);? //"object"

如果定義的變量準(zhǔn)備在將來(lái)用于保存對(duì)象贤徒,那么最好將該變量初始化為null而不是其他值。這樣一來(lái)汇四, 只要直接檢測(cè)null值就可以知道相應(yīng)的變量是否已經(jīng)保存了一個(gè)對(duì)象的引用了接奈。

if (car !=null){

//對(duì)car對(duì)象執(zhí)行某些操作

}

實(shí)際上undefined值是派生自null值的,因此ECMA-262規(guī)定對(duì)它們的相等性測(cè)試要返回true

alert(null==undefined);//true

位于null和undefined之間的相等操作符"=="總是返回true通孽,不過(guò)需要注意的是這個(gè)操作符醋魚比較的目的會(huì)轉(zhuǎn)換其操作數(shù)

只要意在保存對(duì)象的變量還沒(méi)有真正保存對(duì)象序宦,就應(yīng)該明確的讓該變量保存null值。不僅可以體現(xiàn)null作為空對(duì)象指針的慣例還有助于進(jìn)一步區(qū)分null和undefined

3.Boolean

該類型只有兩個(gè)字面值:true和false背苦。這兩個(gè)值與數(shù)字值不是一回事互捌,因此true不一定等于1,而false也不一定等于0行剂。

var found=true秕噪;

var lost=false彼宠;

需要注意的是Boolean類型的字面值true和false是區(qū)分大小寫的

雖然Boolean類型的字面值只有兩個(gè)早抠,但JavaScript中所有類型的值都有與這兩個(gè)Boolean值等價(jià)的值。 要將一個(gè)值轉(zhuǎn)換為其對(duì)應(yīng)的Boolean值辐怕,可以調(diào)用類型轉(zhuǎn)換函數(shù)Boolean()铲觉,

var message="Hello world"澈蝙;

var messageAsBoolean=Boolean(message);

在這個(gè)例子中撵幽,字符串message被轉(zhuǎn)換成了一個(gè)Boolean值灯荧,該值被保存在messageAsBoolean變量中。 可以對(duì)任何數(shù)據(jù)類型的值調(diào)用Boolean()函數(shù)盐杂,而且總會(huì)返回一個(gè)Boolean值逗载。至于返回的這個(gè)值是true還是false, 取決于要轉(zhuǎn)換值的數(shù)據(jù)類型及其實(shí)際值

數(shù)據(jù)類型轉(zhuǎn)換為true的值轉(zhuǎn)換為false的值

Booleantruefalse

String任何非空字符串..(空字符串)

Number任何非零數(shù)字值(包括無(wú)窮大)0和NaN

Object任何對(duì)象null

Undefined不適用undefined

這些轉(zhuǎn)換規(guī)則對(duì)理解流控制語(yǔ)句(如if語(yǔ)句)自動(dòng)執(zhí)行相應(yīng)的Boolean轉(zhuǎn)換非常重要

var message="Hello world";

if (message){

alert("Value is true");

}

運(yùn)行這個(gè)示例况褪,就會(huì)顯示一個(gè)警告框撕贞,因?yàn)樽址甿essage被自動(dòng)轉(zhuǎn)換成了對(duì)應(yīng)的Boolean值(true)。 由于存在這種自動(dòng)執(zhí)行的Boolean轉(zhuǎn)換测垛,因此確切地知道在流控制語(yǔ)句中使用的是什么變量至關(guān)重要

4.Number

這種類型用來(lái)表示整數(shù)和浮點(diǎn)數(shù)值捏膨,還有一種特殊的數(shù)值,即NaN(非數(shù)值 Not a Number)。 這個(gè)數(shù)值用于表示一個(gè)本來(lái)要返回?cái)?shù)值的操作數(shù)未返回?cái)?shù)值的情況(這樣就不會(huì)拋出錯(cuò)誤了)号涯。 例如目胡,在其他編程語(yǔ)言中,任何數(shù)值除以0都會(huì)導(dǎo)致錯(cuò)誤链快,從而停止代碼執(zhí)行誉己。但在JavaScript中, 任何數(shù)值除以0會(huì)返回NaN域蜗,因此不會(huì)影響其他代碼的執(zhí)行巨双。

NaN本身有兩個(gè)非同尋常的特點(diǎn)。首先霉祸,任何涉及NaN的操作(例如NaN/10)都會(huì)返回NaN筑累, 這個(gè)特點(diǎn)在多步計(jì)算中有可能導(dǎo)致問(wèn)題。其次丝蹭,NaN與任何值都不相等慢宗,包括NaN本身。

alert(NaN == NaN);? ? //false

5.String

String類型用于表示由零或多個(gè)16位Unicode字符組成的字符序列奔穿, 即字符串镜沽。字符串可以由單引號(hào)(')或雙引號(hào)(")表示。

String類型的特殊性

string類型有些特殊贱田,因?yàn)樽址哂锌勺兊拇笮∶遘裕燥@然它不能被直接存儲(chǔ)在具有固定大小的變量中。 由于效率的原因湘换,我們希望JS只復(fù)制對(duì)字符串的引用宾舅,而不是字符串的內(nèi)容统阿。但是另一方面彩倚, 字符串在許多方面都和基本類型的表現(xiàn)相似,而字符串是不可變的這一事實(shí)(即沒(méi)法改變一個(gè)字符串值的內(nèi)容)扶平, 因此可以將字符串看成行為與基本類型相似的不可變引用類型

Boolean帆离、Number、String 這三個(gè)是Javascript中的基本包裝類型结澄,也就是這三個(gè)其實(shí)是一個(gè)構(gòu)造函數(shù)哥谷, 他們是Function的實(shí)例,是引用類型麻献,這里的String指的是String這個(gè)構(gòu)造函數(shù),因?yàn)镴avascript是松散類型的们妥。

var name = String("jwy");

alert(typeof name);//"object"

var author = "Tom";

alert(typeof name);//"string"

注意,typeof 變量 如果值是"string" 的話勉吻,也就是這個(gè)變量是字符串监婶,在Javascript中,字符串是基本類型,而在C#或Java中惑惶, 字符串是引用類型煮盼,但是Javascript中的String是引用類型,因?yàn)樗荍avascript中定義好的基本包裝類型带污,在C#中僵控, String跟string其實(shí)是一樣的。

6.Object

ECMAScript中的對(duì)象其實(shí)就是一組數(shù)據(jù)和功能的集合鱼冀。對(duì)象可以通過(guò)new操作符后跟要?jiǎng)?chuàng)建的對(duì)象類型的名稱來(lái)創(chuàng)建报破。 而創(chuàng)建Object類型的實(shí)例并為其添加屬性和方法,就可以創(chuàng)建自定義對(duì)象

var o=new Object()千绪;

在ECMAScript中Object類型是所有它的實(shí)例的基礎(chǔ)泛烙, 也就是說(shuō)Object類型所具有的任何屬性和方法也同樣存在于更具體的對(duì)象中

Object常用方法和屬性

3.常見問(wèn)題

問(wèn)題一:如何判斷數(shù)據(jù)類型

問(wèn)題二:常用數(shù)據(jù)轉(zhuǎn)換方法

4.解決方法

一:使用typeof操作符。typeof操作符的操作數(shù)可以是變量也可以是數(shù)值字面量翘紊。需要注意的是 調(diào)用typeof null會(huì)返回"object"蔽氨,因?yàn)閚ull被認(rèn)為是一個(gè)空的對(duì)象引用。

二:轉(zhuǎn)數(shù)值:parseInt() 和 parseFloat()帆疟。

轉(zhuǎn)字符串: .toString()

強(qiáng)制轉(zhuǎn)換:訪問(wèn)數(shù)據(jù)內(nèi)部?jī)?nèi)容鹉究,并將符合格式的內(nèi)容進(jìn)行轉(zhuǎn)換

Boolean(value) - 把給定的值轉(zhuǎn)換成 Boolean 型;

Number(value) - 把給定的值轉(zhuǎn)換成數(shù)字(可以是整數(shù)或浮點(diǎn)數(shù))踪宠;

String(value) - 把給定的值轉(zhuǎn)換成字符串自赔;

5.擴(kuò)展思考

6.參考文獻(xiàn)

ECMAScript原始類型

ECMAScript引用類型

ECMAScript類型轉(zhuǎn)換

Javascript的三個(gè)組成部分

7.更多討論

數(shù)組類型屬于哪種類型?

var a=[]柳琢;

alert(typeof a) //Object

問(wèn)題:

1.數(shù)據(jù)類型能不能相互轉(zhuǎn)換

答:可以

2.什么是引用類型

答:引用類型就是對(duì)象

3.引用類型和基本類型的區(qū)別

答:請(qǐng)點(diǎn)擊

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末绍妨,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子柬脸,更是在濱河造成了極大的恐慌他去,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,084評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件倒堕,死亡現(xiàn)場(chǎng)離奇詭異灾测,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)垦巴,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,623評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門媳搪,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人骤宣,你說(shuō)我怎么就攤上這事秦爆。” “怎么了憔披?”我有些...
    開封第一講書人閱讀 163,450評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵等限,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我,道長(zhǎng)精刷,這世上最難降的妖魔是什么拗胜? 我笑而不...
    開封第一講書人閱讀 58,322評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮怒允,結(jié)果婚禮上埂软,老公的妹妹穿的比我還像新娘。我一直安慰自己纫事,他們只是感情好勘畔,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,370評(píng)論 6 390
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著丽惶,像睡著了一般炫七。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上钾唬,一...
    開封第一講書人閱讀 51,274評(píng)論 1 300
  • 那天万哪,我揣著相機(jī)與錄音,去河邊找鬼抡秆。 笑死奕巍,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的儒士。 我是一名探鬼主播的止,決...
    沈念sama閱讀 40,126評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼着撩!你這毒婦竟也來(lái)了诅福?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,980評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤拖叙,失蹤者是張志新(化名)和其女友劉穎氓润,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體憋沿,經(jīng)...
    沈念sama閱讀 45,414評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡旺芽,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,599評(píng)論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了辐啄。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,773評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡运嗜,死狀恐怖壶辜,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情担租,我是刑警寧澤砸民,帶...
    沈念sama閱讀 35,470評(píng)論 5 344
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響岭参,放射性物質(zhì)發(fā)生泄漏反惕。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,080評(píng)論 3 327
  • 文/蒙蒙 一演侯、第九天 我趴在偏房一處隱蔽的房頂上張望姿染。 院中可真熱鬧,春花似錦秒际、人聲如沸悬赏。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,713評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)闽颇。三九已至,卻和暖如春寄锐,著一層夾襖步出監(jiān)牢的瞬間兵多,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,852評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工橄仆, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留中鼠,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,865評(píng)論 2 370
  • 正文 我出身青樓沿癞,卻偏偏與公主長(zhǎng)得像援雇,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子椎扬,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,689評(píng)論 2 354

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