鞏固JavaScript系列--01數(shù)據(jù)類(lèi)型和函數(shù)

最近感覺(jué)校招也快到了鉴裹,感覺(jué)自己的知識(shí)體系還是挺亂的饱狂,所以拿起了紅寶書(shū)再仔細(xì)讀讀,對(duì)知識(shí)點(diǎn)再鞏固鞏固朝氓,想每次學(xué)習(xí)完對(duì)整體的一個(gè)知識(shí)點(diǎn)總結(jié)總結(jié)铭污,寫(xiě)下了自己的JavaScript系列學(xué)習(xí)。

script標(biāo)簽

在開(kāi)始寫(xiě)數(shù)據(jù)類(lèi)型之前膀篮,想對(duì)<script>標(biāo)簽記下幾點(diǎn)內(nèi)容。

script標(biāo)簽有以下6個(gè)屬性

1.async:可選岂膳。表示應(yīng)該立即下載腳本誓竿,但不妨礙頁(yè)面中的其他操作,比如可以下載其他資源或等待加載其他腳本谈截。只對(duì)外部腳本文件有效筷屡。

2.charset:可選。表示通過(guò)src屬性指定的代碼的字符集簸喂。由于大多數(shù)瀏覽器會(huì)忽略它的值毙死,所有很少用

3.defer:可選。表示腳本可以延遲到文檔完全被解析和顯示之后再執(zhí)行喻鳄。只對(duì)外部文件有效扼倘。

4.language:已放棄。

5.src:可選除呵。表示包含要執(zhí)行的外部文件再菊。

6.type:可選。表示編碼使用的腳本語(yǔ)言的內(nèi)容類(lèi)型

這里重點(diǎn)記下兩個(gè)比較特殊的屬性async和defer

defer:設(shè)置defer的腳本會(huì)在整個(gè)頁(yè)面都解析完畢之后再執(zhí)行颜曾。

async:指定async屬性的目的是不讓頁(yè)面等待其腳本下載和執(zhí)行纠拔,從而異步加載頁(yè)面的其他內(nèi)容。

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

ECMAScript中有5種簡(jiǎn)單的數(shù)據(jù)類(lèi)型(也稱為基本數(shù)據(jù)類(lèi)型):Undefined泛豪、Null稠诲、Boolean侦鹏、Number和String

還有一種復(fù)雜數(shù)據(jù)類(lèi)型:Object臀叙。Object本質(zhì)是由一組無(wú)序的名值(鍵值)組成略水。

1. Undefined類(lèi)型

Undefined類(lèi)型的值就只有一個(gè)undefined。

var name;
alert(name == undefined)    //true

從上面可以看出匹耕,name只定義聚请,未初始化。它的默認(rèn)值為undefined稳其。與下面代碼一致驶赏。

var name=undefined;
alert(name == undefined)    //true

其實(shí)我們?cè)贈(zèng)]必要為它賦值undefined,因?yàn)樗J(rèn)的值就是undefined既鞠。

2. Null類(lèi)型

Null類(lèi)型的值也只有一個(gè)煤傍,即null。從邏輯角度來(lái)看嘱蛋,null值表示一個(gè)空對(duì)象指針蚯姆,這也是使用typeof操作符檢測(cè)null值時(shí)會(huì)返回object類(lèi)型的原因。

var people=null
alert(typeof people)  //object

如果定義的變量準(zhǔn)備在將來(lái)用于保存對(duì)象洒敏,那么最好將該變量初始化為null而不是其他值(像默認(rèn)的undefined)

undefined值是派生自null值的龄恋,因此下面代碼返回的是true

alert(alert( null == undefined))  //true

但如果是全等操作的話,返回的是false

alert(alert( null === undefined))  //false

無(wú)論什么時(shí)候都沒(méi)有必要把一個(gè)變量的值顯式的設(shè)置為undefined凶伙,可是同樣的規(guī)則對(duì)應(yīng)null卻是不適用郭毕。換句話說(shuō),只要意在保存對(duì)象的變量還沒(méi)有真正的保存對(duì)象函荣,就應(yīng)該為其設(shè)置null值显押。這樣做的目的不僅體現(xiàn)null做為空對(duì)象指針的慣例,而且也有助于進(jìn)一步區(qū)分null和undefined傻挂。這也是null和undefined的只要區(qū)別乘碑。

3. Boolean類(lèi)型

Boolean類(lèi)型有兩個(gè)值即true和false。Boolean類(lèi)型的知識(shí)點(diǎn)主要是下面這個(gè):

可以對(duì)任何數(shù)據(jù)類(lèi)型調(diào)用Boolean()函數(shù)金拒,而且總會(huì)返回一個(gè)Boolean值兽肤。

除了 0、-0、''、NaN腮鞍、null、undefined害驹、false對(duì)其使用Boolean函數(shù)返回的是假(false),其余返回的是真(true)

在流控制語(yǔ)句中(如if語(yǔ)句)蛤育,它會(huì)自動(dòng)執(zhí)行相應(yīng)的Boolean轉(zhuǎn)換宛官。請(qǐng)看下面代碼:

var name='hmz';
if (name){
    alert('my name is hmz')  //my name is hmz
}

因?yàn)閚ame被自動(dòng)執(zhí)行相應(yīng)的Boolean轉(zhuǎn)換葫松,返回的是true

4. Number類(lèi)型

  1. 浮點(diǎn)數(shù)值: 浮點(diǎn)數(shù)值需要的內(nèi)存空間是保存整數(shù)值的兩倍,因此ECMAScript會(huì)不失時(shí)機(jī)地將浮點(diǎn)數(shù)值轉(zhuǎn)換為整數(shù)值底洗。浮點(diǎn)數(shù)值計(jì)算會(huì)產(chǎn)生舍入誤差腋么,比如0.1+0.2不會(huì)等于0.3,而是等于0.3000000...0004亥揖,所以千萬(wàn)不要使用以下代碼珊擂,你會(huì)發(fā)現(xiàn)代碼并不會(huì)去實(shí)現(xiàn)alert:
var a=0.1,b=0.2;
if(a+b == 0.3){       //不要做這樣的測(cè)試
    alert('go this')
}
  1. 數(shù)值范圍: isFinite()函數(shù)在參數(shù)位于最大值(Number.MAX_VALUE)和最小值(Number.MIN_VALUE)之間會(huì)返回true。

  2. NaN: NaN(Not a Number)是一個(gè)特殊的數(shù)值费变。NaN有兩個(gè)特點(diǎn)①任何涉及NaN的操作都會(huì)返回NaN摧扇;②NaN跟任何值都不相等,包括他自己本身挚歧。

根據(jù)NaN的兩個(gè)特點(diǎn)ECMAScript定義了isNaN()函數(shù)扛稽。isNaN()函數(shù)傳入的參數(shù)會(huì)被想轉(zhuǎn)換為數(shù)值再判斷,參數(shù)不會(huì)轉(zhuǎn)換為數(shù)值的函數(shù)會(huì)返回true滑负,否則函數(shù)會(huì)返回false在张。

alert(isNaN(NaN))  //true     不能被轉(zhuǎn)換為數(shù)值
alert(isNaN(10))   //false    10是數(shù)值
alert(isNaN('blue'))  //true  不能被轉(zhuǎn)換為數(shù)值
alert(isNaN('10')) //false   '10'會(huì)被轉(zhuǎn)換為10
alert(isNaN(true))  //false   true會(huì)被轉(zhuǎn)換為1
  1. 數(shù)值轉(zhuǎn)換
    可以轉(zhuǎn)換為數(shù)值的函數(shù)有Number()、parseInt()矮慕、parseFloat()帮匾。Number()函數(shù)可以用于任何數(shù)據(jù)類(lèi)型,而parseInt()和parseFloat()專(zhuān)門(mén)用于把字符串轉(zhuǎn)換為數(shù)值痴鳄。

parseInt()轉(zhuǎn)化為整數(shù)辟狈,可以傳入第二個(gè)參數(shù),告訴瀏覽器按幾進(jìn)制進(jìn)行解析數(shù)據(jù)夏跷,如果不傳第二個(gè)參數(shù),默認(rèn)是10進(jìn)制
parseFloat()轉(zhuǎn)化為浮點(diǎn)數(shù)明未,只解析整數(shù)槽华,故沒(méi)有第二個(gè)參數(shù)。

5. String類(lèi)型

轉(zhuǎn)換為字符的函數(shù)有:toString()和String()趟妥。

toString():①數(shù)值猫态、布爾、對(duì)象披摄、字符串都有toString()方法亲雪。但是null和undefined沒(méi)有toString()方法。②多數(shù)情況下疚膊,toString()方法不必傳參义辕,但也可以為其傳一個(gè)參數(shù),該參數(shù)可以將num.toString(2|8|10|16)返回幾進(jìn)制的字符串表示

String():在不知道要轉(zhuǎn)換的值是不是undefined和null的情況下寓盗,還可以使用String()函數(shù)灌砖。這個(gè)函數(shù)能將任何類(lèi)型的值轉(zhuǎn)換為字符串璧函。

6. Object類(lèi)型

ECMAScript中的對(duì)象其實(shí)就是一組數(shù)據(jù)和功能的集合。

Object的每個(gè)實(shí)例都有下列的屬性和方法:

  1. constructor:保存著用于創(chuàng)建當(dāng)前對(duì)象的函數(shù)基显,即構(gòu)造器蘸吓。
  2. hasOwnProperty:用于檢查給定的屬性在當(dāng)前對(duì)象實(shí)例中是否存在(而不是在實(shí)例的原型中)。如:people.hasOwnProperty('name')
  3. isPrototypeOf(object): 檢測(cè)傳入的對(duì)象是否是當(dāng)期對(duì)象的原型
  4. propertyIsEnumerable(propertyName): 檢測(cè)傳入的屬性能否使用for-in進(jìn)行枚舉
    5.toLocaleString():返回對(duì)象的字符串表示撩幽,該字符串與執(zhí)行環(huán)境對(duì)應(yīng)
  5. toString():返回對(duì)象的字符串表示
  6. valueOf:返回對(duì)象的字符串库继、數(shù)組或布爾的表示。通常與toString()的返回值相同

在ECMAScript中Object是所有對(duì)象的基礎(chǔ)窜醉,因此所有對(duì)象都具有上面這些基本的屬性和方法宪萄。

函數(shù)

函數(shù)中個(gè)人感覺(jué)想要去注意的是函數(shù)的返回值和函數(shù)的參數(shù)。

  1. 函數(shù)的返回值:函數(shù)中要么讓函數(shù)始終都返回一個(gè)值酱虎,要么永遠(yuǎn)都不要返回值雨膨。如果未指定返回值的函數(shù),那么它返回的是一個(gè)特殊的undefined值
  2. 理解參數(shù):

ECMAScript函數(shù)傳遞參數(shù)比較靈活读串,定義函數(shù)參數(shù)也比較靈活聊记。原因在于ECMAScript的參數(shù)在內(nèi)部是用一個(gè)數(shù)組來(lái)表示的。函數(shù)接收到的是這個(gè)數(shù)組恢暖,而不關(guān)心數(shù)組中包含哪些參數(shù)排监。實(shí)際上在函數(shù)體內(nèi)可以通過(guò)arguments對(duì)象來(lái)訪問(wèn)這個(gè)參數(shù)數(shù)組,從而獲取傳遞給函數(shù)的每一個(gè)參數(shù)杰捂。

arguments對(duì)象只是與數(shù)組類(lèi)似(他并不是Array的實(shí)例)舆床,因?yàn)榭梢允褂肹 ]來(lái)訪問(wèn)它的每一個(gè)元素,使用length屬性可以確定傳遞進(jìn)來(lái)多少參嫁佳。arguments的length由傳入的參數(shù)個(gè)數(shù)決定的挨队,不是由定義函數(shù)時(shí)的命名參數(shù)的個(gè)數(shù)決定的。對(duì)于沒(méi)有傳遞值的命名參數(shù)將被自動(dòng)賦予undefined蒿往,這就跟定義了變量但沒(méi)有初始化一樣盛垦。

函數(shù)實(shí)現(xiàn)偽重載

function doAdd() {
    if (arguments.length == 1){
        alert(arguments[0])
    }
    else if (arguments.length == 2){
        alert(arguments[0] + arguments[1])
    }
}
doAdd(10)   //10
doAdd(10,20)  //30

上面利用arguments的length可以實(shí)現(xiàn)偽重載,但ECMAScript中是沒(méi)有真正的重載(方法名一樣瓤漏,接收的參數(shù)的類(lèi)型或數(shù)量不同)腾夯,因?yàn)镋CMAScript不存在函數(shù)簽名(函數(shù)簽名由參數(shù)個(gè)數(shù)與其類(lèi)型組成)的特性!J叱洹蝶俱!函數(shù)名相同的情況下ECMAScript中前面定義的函數(shù)會(huì)被后面定義的函數(shù)所覆蓋,故而沒(méi)有真正的重載饥漫,但可以使用上面的代碼實(shí)現(xiàn)偽重載榨呆。

結(jié)尾

時(shí)間過(guò)的很快,不知不覺(jué)快要八月中旬了庸队,各個(gè)公司也開(kāi)始陸續(xù)開(kāi)放網(wǎng)申了愕提,不由的會(huì)想太多東西馒稍,故而感覺(jué)最近的節(jié)奏感沒(méi)跟上,上周在學(xué)Vue感覺(jué)也是不是很好浅侨,沒(méi)有把真正的心思放在學(xué)Vue上面纽谒,搞七搞八的一周也過(guò)去了。現(xiàn)在自己就想靜靜如输,外面的世界如何如何鼓黔,你的能力有限,大可不必在乎不见,現(xiàn)在呢要做的只有好好的靜下心澳化,堅(jiān)持吧,一切順其自然稳吮!再說(shuō)寫(xiě)這個(gè)JavaScript系列缎谷,我也不知道我會(huì)寫(xiě)多少,當(dāng)我還是會(huì)盡自己最大的努力去總結(jié)灶似。

于 廈門(mén)高崎新村 自己的小屋

本文首發(fā)于個(gè)人博客>> shineTomorrow--一個(gè)路上慢慢行走的前端人

參考文獻(xiàn):《JavaScript高級(jí)程序設(shè)計(jì)》

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末列林,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子酪惭,更是在濱河造成了極大的恐慌希痴,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,997評(píng)論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件春感,死亡現(xiàn)場(chǎng)離奇詭異砌创,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)鲫懒,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,603評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén)嫩实,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人窥岩,你說(shuō)我怎么就攤上這事舶赔。” “怎么了谦秧?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,359評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)撵溃。 經(jīng)常有香客問(wèn)我疚鲤,道長(zhǎng),這世上最難降的妖魔是什么缘挑? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,309評(píng)論 1 292
  • 正文 為了忘掉前任集歇,我火速辦了婚禮,結(jié)果婚禮上语淘,老公的妹妹穿的比我還像新娘诲宇。我一直安慰自己际歼,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,346評(píng)論 6 390
  • 文/花漫 我一把揭開(kāi)白布姑蓝。 她就那樣靜靜地躺著鹅心,像睡著了一般。 火紅的嫁衣襯著肌膚如雪纺荧。 梳的紋絲不亂的頭發(fā)上旭愧,一...
    開(kāi)封第一講書(shū)人閱讀 51,258評(píng)論 1 300
  • 那天,我揣著相機(jī)與錄音宙暇,去河邊找鬼输枯。 笑死,一個(gè)胖子當(dāng)著我的面吹牛占贫,可吹牛的內(nèi)容都是我干的桃熄。 我是一名探鬼主播,決...
    沈念sama閱讀 40,122評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼型奥,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼瞳收!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起桩引,我...
    開(kāi)封第一講書(shū)人閱讀 38,970評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤缎讼,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后坑匠,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體血崭,經(jīng)...
    沈念sama閱讀 45,403評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,596評(píng)論 3 334
  • 正文 我和宋清朗相戀三年厘灼,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了夹纫。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,769評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡设凹,死狀恐怖舰讹,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情闪朱,我是刑警寧澤月匣,帶...
    沈念sama閱讀 35,464評(píng)論 5 344
  • 正文 年R本政府宣布,位于F島的核電站奋姿,受9級(jí)特大地震影響锄开,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜称诗,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,075評(píng)論 3 327
  • 文/蒙蒙 一萍悴、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦癣诱、人聲如沸计维。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,705評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)鲫惶。三九已至,卻和暖如春嗅蔬,著一層夾襖步出監(jiān)牢的瞬間剑按,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,848評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工澜术, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留艺蝴,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,831評(píng)論 2 370
  • 正文 我出身青樓鸟废,卻偏偏與公主長(zhǎng)得像猜敢,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子盒延,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,678評(píng)論 2 354

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

  • 最近感覺(jué)校招也快到了缩擂,感覺(jué)自己的知識(shí)體系還是挺亂的,所以拿起了紅寶書(shū)再仔細(xì)讀讀添寺,對(duì)知識(shí)點(diǎn)再鞏固鞏固胯盯,想每次學(xué)習(xí)完對(duì)...
    shineTomorrow閱讀 160評(píng)論 0 3
  • 第5章 引用類(lèi)型(返回首頁(yè)) 本章內(nèi)容 使用對(duì)象 創(chuàng)建并操作數(shù)組 理解基本的JavaScript類(lèi)型 使用基本類(lèi)型...
    大學(xué)一百閱讀 3,233評(píng)論 0 4
  • 什么是 JavaScript 語(yǔ)言? JavaScript 是一種輕量級(jí)的腳本語(yǔ)言计露。所謂“腳本語(yǔ)言”(script...
    oWSQo閱讀 1,790評(píng)論 0 1
  • 有人說(shuō)博脑,香鍋就是沒(méi)有湯的火鍋。聽(tīng)上去似乎有道理票罐,但好像又不是那么回事......各位吃貨覺(jué)得呢叉趣?歡迎留言討論~ 地...
    味庫(kù)美食視頻閱讀 1,205評(píng)論 6 16
  • 什么是RxJava## RxJava 就是異步 RxJava 的異步實(shí)現(xiàn),是通過(guò)一種擴(kuò)展的觀察者模式來(lái)實(shí)現(xiàn)的该押。 一...
    IAM四十二閱讀 1,935評(píng)論 2 9