2018-08-08 JavaScript高程閱讀筆記-數(shù)據(jù)類(lèi)型

1. 基本語(yǔ)法

1.1 JS 中所有的一切都區(qū)分大小寫(xiě)特姐。

1.2 標(biāo)識(shí)符規(guī)則:

第一個(gè)字符必須是字母晶丘、下劃線_或者一個(gè)美元符號(hào)$。其他字符可以是字母唐含,下劃線浅浮,美元符號(hào)或者數(shù)字。推薦標(biāo)識(shí)符采用駝峰大小寫(xiě)格式觉壶。

1.3 嚴(yán)格模式:

嚴(yán)格模式是為JS定義一種不同的解析和執(zhí)行模型脑题。在嚴(yán)格模式下,ES3中一些不確定的行為將得到處理铜靶,而且對(duì)某些不安全的操作也會(huì)拋出錯(cuò)誤叔遂。

2. 變量var:

用var操作符定義的變量將成為定義該變量的作用域中的局部變量。也就是說(shuō)争剿,如果在函數(shù)中使用var定義一個(gè)變量已艰,那么這個(gè)變量在函數(shù)退出后就會(huì)被銷(xiāo)毀(局部變量),如果沒(méi)有這個(gè)var蚕苇,說(shuō)明的變量將會(huì)是全局變量哩掺。

3. 數(shù)據(jù)類(lèi)型

JS中的五種簡(jiǎn)單數(shù)據(jù)類(lèi)型: Undefined, Null, Boolean, Number和String。一種復(fù)雜結(jié)構(gòu)類(lèi)型:Object涩笤。在JS中函數(shù)是一種對(duì)象object嚼吞。

3.1 檢測(cè)給定變量的數(shù)據(jù)類(lèi)型:typeof 操作符

typeof 是一個(gè)操作符,并非是一個(gè)函數(shù)蹬碧。對(duì)于typeof返回的字符串解釋如下

  • “undefined”: 未定義
  • "boolean": 布爾值
  • "string": 字符串
  • "number": 數(shù)值
  • "object": 對(duì)象或者null
  • "function": 函數(shù)

3.2 undefined類(lèi)型

undefined類(lèi)型只有一個(gè)值舱禽,在使用var聲明變量但是未對(duì)其加以初始化的時(shí)候,這個(gè)變量值就是undefined恩沽。注意是聲明變量但是未加以初始化誊稚。

但是:對(duì)于未初始化的變量執(zhí)行typeof操作符會(huì)返回undefined,對(duì)未申明的變量執(zhí)行typeof操作符同樣也會(huì)返回undefined值罗心。

3.3 Null類(lèi)型

Null類(lèi)型是第二個(gè)只有一個(gè)值的數(shù)據(jù)類(lèi)型里伯,這個(gè)特殊值是null。null值表示一個(gè)空對(duì)象指針渤闷,因此typeof null會(huì)得到object疾瓮。
undefined派生自null值,因此null == undefined返回的是true肤晓。

與變量的undefined類(lèi)型不同爷贫。對(duì)于對(duì)象來(lái)說(shuō)认然,只要意在保存的對(duì)象變量還沒(méi)有真正保存對(duì)象時(shí),就應(yīng)該明確讓該變量保存null值漫萄,這樣做不僅可以體現(xiàn)null作為空對(duì)象的指針的慣例卷员,也有助于區(qū)分null和undefined。

3.3 boolean類(lèi)型

布爾值腾务,兩個(gè)值truefalse注意是全小寫(xiě)

數(shù)據(jù)類(lèi)型 轉(zhuǎn)換為true的值 轉(zhuǎn)換為false的值
Boolean true false
String 任何非空字符串 "" (空字符串)
Number 任何非零數(shù)字值(包括無(wú)窮大) 0和NaN
Object 任何對(duì)象 null
undefined 不適用 undefined
有趣的是如果我使用Boolean (undefined)Boolean(null)得到的會(huì)是false毕骡。但是,如果我們收入undefined==falsenull==false時(shí)輸出卻為false,原因是在等式轉(zhuǎn)換中: 如果其中一個(gè)值是true岩瘦,則將其轉(zhuǎn)換為1再進(jìn)行比較未巫。如果其中一個(gè)值是false,則將其轉(zhuǎn)換為0再進(jìn)行比較启昧。

3.4 Number 類(lèi)型

Number 類(lèi)型使用IEEE754格式來(lái)表示整數(shù)和浮點(diǎn)數(shù)叙凡。
八進(jìn)制字面值表示:第一位為0,然后是八進(jìn)制數(shù)字序列(0~7).如果字面值中的數(shù)字超出了范圍密末,前導(dǎo)零被忽略握爷,后面的數(shù)值將當(dāng)作十進(jìn)制數(shù)值解析,例子:

var num1 = 070;//八進(jìn)制的56
var num2 = 079;//解析為十進(jìn)制的79
var num3 = 08;// 解析為十進(jìn)制的8

十六進(jìn)制的表示: 前兩位為0x,后面跟任何十六進(jìn)制的數(shù)字(09严里,AF)新啼;A~F不區(qū)分大小寫(xiě),例子:

var num1 = 0xA//十六進(jìn)制的10
var num2 = 0x1f//十六進(jìn)制的31

關(guān)于浮點(diǎn)數(shù)和極值:

  1. 表示方法:傳統(tǒng)的小數(shù)點(diǎn)和科學(xué)記數(shù)法e
  2. 對(duì)于類(lèi)似10.01.JS會(huì)自動(dòng)轉(zhuǎn)換為整數(shù)
  3. 最高精度:17位
  4. 計(jì)算時(shí)精度不如整數(shù)
  5. 最值:Infinity

NaN

NaN(Not a Number)是一個(gè)特殊的數(shù)值刹碾,用于表示一個(gè)本來(lái)要返回?cái)?shù)值的操作數(shù)未返回?cái)?shù)值的情況燥撞。
兩大特點(diǎn):

  1. 任何涉及NaN的操作都返回NaN.
  2. NaN 與任何值都不相等,包括NaN本身迷帜。

isNaN() 函數(shù):判斷參數(shù)是否是NaN,例子:

isNaN(NaN)//true
isNaN(10)//false
isNaN("10")//false,雖然是字符串形式物舒,但是可以被轉(zhuǎn)換成數(shù)值10
isNaN(“blue”)//true
isNaN(true)//false,可以被轉(zhuǎn)換成數(shù)值1
對(duì)于基于對(duì)象調(diào)用isNaN()函數(shù)時(shí),會(huì)首先調(diào)用對(duì)象的valueof()方法戏锹,然后確定該方法能否可以轉(zhuǎn)為數(shù)值茶鉴。如果不能,再接著調(diào)用toString()方法景用,再測(cè)試返回值。

數(shù)值轉(zhuǎn)換

3個(gè)函數(shù)可以把非數(shù)值轉(zhuǎn)換為數(shù)值: Number(), parseInt(), parseFloat()惭蹂,其中Number()可以用于任何數(shù)據(jù)類(lèi)型伞插,而其他兩個(gè)專(zhuān)門(mén)用于將字符串轉(zhuǎn)換為數(shù)值。

Number()規(guī)則:
  1. 對(duì)于Boolean值盾碗,true被轉(zhuǎn)化為1媚污,false為0
  2. null返回為0;
  3. undefined返回為NaN
  4. 對(duì)于字符串:
    a. 如果字符串中只包含數(shù)字廷雅,則將其轉(zhuǎn)換成十進(jìn)制數(shù)值耗美,011會(huì)變成11京髓,0被自動(dòng)省略
    b. 如果字符串包含有效的浮點(diǎn)數(shù)格式,則將其轉(zhuǎn)換為對(duì)應(yīng)的浮點(diǎn)數(shù)值
    c. 如果字符串中包含有效的16進(jìn)制格式商架,如0xf堰怨,則將其轉(zhuǎn)換為相同大小的十進(jìn)制整數(shù)值
    d. 空字符串轉(zhuǎn)化為0
    e. 如果字符串中包含上述字符串格式以外的字符,返回NaN
    f. 如果是對(duì)象蛇摸,會(huì)首先調(diào)用對(duì)象的valueof()方法备图,然后確定該方法能否可以轉(zhuǎn)為數(shù)值。如果不能赶袄,再接著調(diào)用toString()方法揽涮,再依照前面的規(guī)則測(cè)試返回值(與NaN類(lèi)似)。
Number()舉例:
var num1 = Number("Hello world");     //NaN
var num2 = Number("");     //0
var num3 = Number("000011");     //11,前導(dǎo)0被忽略饿肺。
var num4 = Number(true);     //1
var num5 = Number("hello123") //NaN
var num6 = Number("123hello123") //NaN

Number()函數(shù)在轉(zhuǎn)換字符串的時(shí)候比較復(fù)雜且不合理蒋困,因此處理整數(shù)時(shí)使用的是parseInt()函數(shù)。該函數(shù)在轉(zhuǎn)換字符串時(shí)敬辣,更多的是看其是否符合數(shù)值模式雪标。他會(huì)忽略字符串前面的空格,直到找到第一個(gè)非空格字符购岗。如果第一個(gè)字符不是數(shù)字或者符號(hào)汰聋,則返回NaN。
注意:這意味著parseInt("")或者parseInt("hello123")會(huì)得到NaN喊积。
如果遇到的第一個(gè)字符為數(shù)字字符烹困,會(huì)接著向下解析,直到解析完或者遇到了一個(gè)非數(shù)字字符為止乾吻。與Number()不同的是髓梅,parseInt()可以識(shí)別各種整數(shù)形式(十進(jìn)制,八進(jìn)制绎签,十六進(jìn)制)枯饿。

parseInt()舉例
var num1 = parseInt("123456blue");  //1234
var num2 = parseInt("");  //NaN
var num3 = parseInt("0xA");  //10(能識(shí)別為十六進(jìn)制數(shù))
var num4 = parseInt(22.5);  //22
var num5 = parseInt("070");  //56 (能識(shí)別為八進(jìn)制)
var num6 = parseInt("70");  //70
注意: 上列的070在我的Chrome瀏覽器中顯示為70;原因是ES3和ES5在處理類(lèi)似八進(jìn)制的字符串時(shí)存在分歧(這幫人腦回路真有意思)诡必。ES3 解析為56奢方,ES5解析為70。怎么辦爸舒?向parseInt()函數(shù)引入第二個(gè)參數(shù)蟋字,明確轉(zhuǎn)換進(jìn)制。
var num1 = parseInt("0xAF", 16);  //175
var num2 = parseInt("AF", 16);  //175
var num3 = parseInt("AF");  //NaN
var num4 = parseInt("10", 2);  //2,按二進(jìn)制解析
var num5 = parseInt("10", 8);  //8扭勉, 按八進(jìn)制解析
var num6 = parseInt("10", 10);  //10鹊奖,按十進(jìn)制解析
var num7 = parseInt("10", 16);  //16, 按十六進(jìn)制解析

parseInt()類(lèi)似parseFloat()解析到第一個(gè)無(wú)效的浮點(diǎn)數(shù)為止涂炎。還有一個(gè)主要區(qū)別是parseFloat()始終忽略前導(dǎo)0忠聚。parseFloat()只解析十進(jìn)制设哗,因此沒(méi)有像parseInt()指定基數(shù)的用法。
舉例:

var num1 = parseFloat("0xA");  //0
var num2= parseFloat("1234blue");  //1234
var num3 = parseFloat("22.5");  //22.5
var num4 = parseFloat("22.234.2");  //22.234
var num5 = parseFloat("0908.5");  //908.5

3.5 String

string用于表示由零或多個(gè)16位Unicode字符組成的字符序列两蟀,即字符串网梢。JS中字符串可以是雙引號(hào)可以是單引號(hào),但是開(kāi)頭結(jié)尾需要保持一致垫竞。

轉(zhuǎn)義

字面量 含義
\n 換行
\t 制表
\b 退格
\r 回車(chē)
\f 進(jìn)紙
\ 斜杠
' 單引號(hào)
" 雙引號(hào)
\xnn 以16進(jìn)制碼nn表示一個(gè)字符
\unnnn 以16進(jìn)制碼nnnn表示的一個(gè)Unicode字符

注意:轉(zhuǎn)義序列的長(zhǎng)度為一澎粟,因?yàn)樗褪且粋€(gè)字符。"\u03a3".length = 1

轉(zhuǎn)換為字符串:toString();

null和undefined沒(méi)有toString()方法欢瞪。
通過(guò)傳遞基數(shù)活烙,toString()可以輸出二進(jìn)制,八進(jìn)制遣鼓,十六進(jìn)制等等啸盏。

string()方法

  • 如果值有toString()方法,則調(diào)用該方法骑祟。
  • 如果值是null回懦,則返回"null"
  • 如果值是undefined,則返回"undefined"

另外加號(hào)操作符也可以將某值轉(zhuǎn)換為字符串次企,方法為+"".

Object

對(duì)象即是功能和數(shù)據(jù)的集合怯晕。通過(guò)new操作符后跟要?jiǎng)?chuàng)建的對(duì)象類(lèi)型的名稱(chēng)來(lái)創(chuàng)建。而創(chuàng)建Object類(lèi)型的實(shí)例并且為其添加屬性或者方法缸棵,就可以創(chuàng)建自定義對(duì)象舟茶。如:
` var o = new Object();
每個(gè)Object實(shí)例都有以下屬性和方法:

  • constructor: 保存著用于創(chuàng)建當(dāng)前對(duì)象的函數(shù),對(duì)于前面的例子而言堵第,constructor就是Object()吧凉。這是一個(gè)函數(shù)
  • hasOwnProperty(perpertyName): 用于檢查給定的屬性在當(dāng)前對(duì)象實(shí)例中(并非在原型中)是否存在。其中作為參數(shù)的屬性名需要時(shí)字符串格式踏志。如:o.hasOwnProperty('name').
  • isPrototypeod(object): 用于檢查傳入對(duì)象是否是當(dāng)前對(duì)象的原型阀捅。
  • propertyIsEnumerable(propertyName):用于檢查給定的屬性是否能夠使用for-in語(yǔ)句來(lái)枚舉。與hasOwnProperty(perpertyName)一致作為參數(shù)的屬性名需要時(shí)字符串格式针余。
  • toLocalString():返回對(duì)象的字符串表示饲鄙,該字符串與執(zhí)行的環(huán)境的地區(qū)對(duì)應(yīng)
  • toString(): 返回對(duì)象的字符串表示
  • valueOf(): 返回對(duì)象的字符串,數(shù)值或者布爾表示圆雁,通常與toString()的返回值相同傍妒。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市摸柄,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌既忆,老刑警劉巖驱负,帶你破解...
    沈念sama閱讀 211,817評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件嗦玖,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡跃脊,警方通過(guò)查閱死者的電腦和手機(jī)宇挫,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,329評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)酪术,“玉大人器瘪,你說(shuō)我怎么就攤上這事』嫜悖” “怎么了橡疼?”我有些...
    開(kāi)封第一講書(shū)人閱讀 157,354評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)庐舟。 經(jīng)常有香客問(wèn)我欣除,道長(zhǎng),這世上最難降的妖魔是什么挪略? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,498評(píng)論 1 284
  • 正文 為了忘掉前任历帚,我火速辦了婚禮,結(jié)果婚禮上杠娱,老公的妹妹穿的比我還像新娘挽牢。我一直安慰自己,他們只是感情好摊求,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,600評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布禽拔。 她就那樣靜靜地躺著,像睡著了一般睹簇。 火紅的嫁衣襯著肌膚如雪奏赘。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,829評(píng)論 1 290
  • 那天太惠,我揣著相機(jī)與錄音磨淌,去河邊找鬼。 笑死凿渊,一個(gè)胖子當(dāng)著我的面吹牛梁只,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播埃脏,決...
    沈念sama閱讀 38,979評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼搪锣,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了彩掐?” 一聲冷哼從身側(cè)響起构舟,我...
    開(kāi)封第一講書(shū)人閱讀 37,722評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎堵幽,沒(méi)想到半個(gè)月后狗超,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體弹澎,經(jīng)...
    沈念sama閱讀 44,189評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,519評(píng)論 2 327
  • 正文 我和宋清朗相戀三年努咐,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了苦蒿。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,654評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡渗稍,死狀恐怖佩迟,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情竿屹,我是刑警寧澤报强,帶...
    沈念sama閱讀 34,329評(píng)論 4 330
  • 正文 年R本政府宣布,位于F島的核電站羔沙,受9級(jí)特大地震影響躺涝,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜扼雏,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,940評(píng)論 3 313
  • 文/蒙蒙 一坚嗜、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧诗充,春花似錦苍蔬、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,762評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至茎匠,卻和暖如春格仲,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背诵冒。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,993評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工凯肋, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人汽馋。 一個(gè)月前我還...
    沈念sama閱讀 46,382評(píng)論 2 360
  • 正文 我出身青樓侮东,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親豹芯。 傳聞我的和親對(duì)象是個(gè)殘疾皇子悄雅,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,543評(píng)論 2 349

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