【讀書筆記】JavaScript高級(jí)程序設(shè)計(jì)(第3版)(第1-4章)

第1章 JavaScript簡(jiǎn)介

1.2 JavaScript實(shí)現(xiàn)

DOM級(jí)別
DOM0,實(shí)際不存在,指的是Internet explorer4.0和Netscape navigator4.0最初支持的DHTML。
DOM1,DOM核心和DOM HTML。
DOM2夭苗,擴(kuò)充鼠標(biāo)、用戶界面事件隔缀、范圍题造、歷遍、CSS支持猾瘸。
DOM3晌梨,引入以統(tǒng)一方式加載和保存文檔的方法桥嗤,新增驗(yàn)證文檔方法DOM驗(yàn)證,DOM核心擴(kuò)展等仔蝌。

第2章 在HTML中使用JavaScript

2.1 <script>元素

charset,指定的代碼字符集荒吏,大多數(shù)瀏覽器會(huì)忽略它的值敛惊。

defer,延遲到文檔完全被解析和顯示之后再執(zhí)行绰更。但在現(xiàn)實(shí)中瞧挤,多個(gè)延遲腳本不一定會(huì)按照順序執(zhí)行,建議只包含一個(gè)延遲腳本儡湾。HTML5會(huì)忽略該屬性特恬。

async,立即下載腳本徐钠。目的是不讓頁(yè)面等待兩個(gè)腳本下載和執(zhí)行癌刽。多個(gè)async腳本不一定按照他們的先后順序執(zhí)行,確保async腳本之間互不依賴尝丐。

瀏覽器會(huì)按照<script>出現(xiàn)的先后順序依次解析显拜。

2.4 <noscript>元素

<noscript>用于在不支持JavaScript的瀏覽器中顯示替代內(nèi)容。

第3章 基本概念

3.4 數(shù)據(jù)類型

typeof是一個(gè)操作符而不是函數(shù)爹袁,因此typeof()加圓括號(hào)不是必須的远荠。

typeof null返回object,因?yàn)閚ull被認(rèn)為是一個(gè)空的引用對(duì)象失息。null值表示一個(gè)空對(duì)象指針譬淳。

typeof 正則表達(dá)式 返回function或object。

函數(shù)是一種特殊的對(duì)象盹兢。

對(duì)于尚未初始化和沒(méi)被聲明的變量邻梆,typeof都會(huì)返回undefined。

只要保存對(duì)象的變量還沒(méi)有真正保存對(duì)象時(shí)蛤迎,就應(yīng)該明確讓該變量保存null值确虱。

null==undefined返回true,因?yàn)閡ndefined值是派生自null值的替裆。

if(Boolean(message))與if(message)等價(jià)校辩,false、""(空字符串)辆童、0宜咒、NaN、bull把鉴、undefined的布爾值都為false故黑。

八進(jìn)制字面值第一位必須是0儿咱,然后是八進(jìn)制數(shù)字序列0-7,如果字面值超出范圍场晶,前導(dǎo)0將忽略混埠,后面數(shù)值被當(dāng)做十進(jìn)制數(shù)值解析。如

onum1=070;//八進(jìn)制56
onum2=079;//十進(jìn)制79
onum3=08;//十進(jìn)制8

在進(jìn)行算數(shù)計(jì)算時(shí)诗轻,所有八進(jìn)制和十六進(jìn)制數(shù)值都將轉(zhuǎn)換為十進(jìn)制數(shù)值钳宪。

保存浮點(diǎn)數(shù)值需要的內(nèi)存空間是保存整數(shù)值的2倍。

浮點(diǎn)數(shù)值最高精度是17位小數(shù)扳炬,但在計(jì)算時(shí)不能測(cè)試特定的浮點(diǎn)數(shù)吏颖。如a+b==0.3將得不到準(zhǔn)確結(jié)果,因?yàn)?.1+0.2結(jié)果是0.30000000000000004恨樟。這是IEEE754數(shù)值浮點(diǎn)計(jì)算的通病半醉。

瀏覽器最小數(shù)值Number.MIN_VALUE=5e-324,最大數(shù)值Number.MAX_VALUE=1.7976931348623157e+308劝术。

超出范圍的值將自動(dòng)轉(zhuǎn)換為Infinity(無(wú)窮)缩多。Number.NEGATIVE_INFINITY=-Infinity,Number.POSITIVE_INFINITY=Infinity夯尽。

isFinite()函數(shù)判斷數(shù)值是否是有窮的瞧壮,返回布爾值。

NaN匙握,非數(shù)值咆槽,number/0=NaN。涉及NaN的操作都會(huì)返回NaN圈纺,且NaN==NaN返回false秦忿。

isNaN()函數(shù)判斷是否“不是數(shù)值”。如isNaN(NaN)返回true蛾娶,isNaN("blue")返回true灯谣,isNaN(true)返回false(可以被轉(zhuǎn)為數(shù)值1),isNaN(false)返回false(可以被轉(zhuǎn)為數(shù)值0)蛔琅。

轉(zhuǎn)型函數(shù)Number()可用于任何數(shù)據(jù)類型胎许,parseInt()、parseFloat()用于把字符串轉(zhuǎn)換成數(shù)值罗售。

Number("")返回0辜窑,parseInt("")返回NaN。

parseInt("070")在ES3中解析為56(八進(jìn)制)寨躁,ES5中parseInt()已不具有解析八進(jìn)制的能力穆碎,因此為解析為0≈翱遥可指定基數(shù)parseInt("070"所禀,8)確保按八進(jìn)制解析方面。

parseFloat()只能解析十進(jìn)制,從第一個(gè)字符解析到遇見(jiàn)第一個(gè)無(wú)效的浮點(diǎn)數(shù)字字符為止色徘。

若字符串中包含雙音節(jié)字符恭金,length屬性可能不會(huì)精確的返回字符串中的字符數(shù)目。(why贺氓?)

toString()可以將數(shù)值蔚叨、布爾值、對(duì)象和字符串值轉(zhuǎn)換為字符串辙培。但是null和undefined沒(méi)有這個(gè)方法。如toString(10)返回"10"(字符串)邢锯。

Srting()能夠?qū)⑷魏晤愋娃D(zhuǎn)換為字符串扬蕊。如Srting(null)返回"null"。

3.5 操作符

一元加和減操作符主要用于基本算數(shù)運(yùn)算丹擎,或者用于轉(zhuǎn)換數(shù)據(jù)類型尾抑,即將非數(shù)值轉(zhuǎn)換為數(shù)值(包括NaN)。

&&(邏輯或)是短路操作符蒂培,即如果第一個(gè)操作符求值結(jié)果為true再愈,就不會(huì)對(duì)第二個(gè)操作數(shù)求值了,可以利用這一行為避免為變量賦null或undefined值护戳。

加法操作符翎冲,如果有一個(gè)操作數(shù)是字符串時(shí),則將另一個(gè)操作數(shù)轉(zhuǎn)換為字符串媳荒,再拼接起來(lái)抗悍。如

var message=‘blue’+3+5;//結(jié)果是blue35。

比較兩個(gè)字符串時(shí)钳枕,實(shí)際是比較兩個(gè)字符串對(duì)應(yīng)位置的每個(gè)字符的字符編碼值缴渊,因此’Blue’<apple返回true。因?yàn)榇髮懽帜傅淖址幋a全部小于小寫字母鱼炒。

任何操作數(shù)與NaN比較時(shí)結(jié)果都是false衔沼。

==(相等)和!=(不相等),先將對(duì)象轉(zhuǎn)換成相似的類型昔瞧,再比較指蚁。NaN==NaN返回false,NaN硬爆!=NaN欣舵,返回true。null==undefined返回true缀磕。

===(全等)和!==(不全等)缘圈,僅比較不轉(zhuǎn)換劣光。NaN===NaN返回false。null==undefined返回false(因?yàn)椴皇峭愋停?/p>

逗號(hào)操作符賦值時(shí)糟把,返回表達(dá)式最后一項(xiàng)绢涡。如

var a=(1,2,3);//a結(jié)果為3

3.6 語(yǔ)句

不存在塊級(jí)作用域,因此在循環(huán)內(nèi)部定義的變量也可以在外部環(huán)境訪問(wèn)到遣疯。

for-in語(yǔ)句用來(lái)枚舉對(duì)象的屬性雄可。

使用label標(biāo)簽的嵌套循環(huán)中有continue,會(huì)跳出內(nèi)循環(huán)繼續(xù)執(zhí)行外循環(huán)中的語(yǔ)句缠犀。如

num=0;
outermost:for(i=0;i<10;i++){
  for(j=0;j<10;j++){
    if(i==5&&j==5){
      continue outermost;
    }num++;
  }
}
//num結(jié)果為95

不使用label標(biāo)簽的嵌套循環(huán)中有break数苫,會(huì)跳出內(nèi)循環(huán),從頭執(zhí)行外循環(huán)辨液。如

num=0;
for(i=0;i<10;i++){
  for(j=0;j<10;j++){
    if(i==5&&j==5){
      break;
    }
    num++;
  }
}
//num結(jié)果為94虐急。

switch語(yǔ)句中可以使用任何類型,比較值時(shí)使用的是全等操作符滔迈。

3.7 函數(shù)

定義兩個(gè)同名函數(shù)止吁,位于后面的會(huì)覆蓋前面的。

arguments對(duì)象可以訪問(wèn)傳入函數(shù)的參數(shù)燎悍。如arguments[0]的值是函數(shù)的第一個(gè)參數(shù)的值敬惦。arguments與參數(shù)值是同步的,但內(nèi)存空間是獨(dú)立的谈山。

第4章 變量俄删、作用域和內(nèi)存問(wèn)題

4.1 基本類型和引用類型的值

操作對(duì)象時(shí)實(shí)際上是在操作對(duì)象的引用而不是實(shí)際的對(duì)象。

不能給基本類型的值添加屬性勾哩。

從一個(gè)對(duì)象向另一個(gè)對(duì)象復(fù)制基本類型的值時(shí)抗蠢,會(huì)在變量對(duì)象上創(chuàng)建一個(gè)新值,然后把該值復(fù)制到為新變量分配到位置上思劳。

從一個(gè)變量向另一個(gè)變量復(fù)制引用類型的值時(shí)迅矛,同樣也會(huì)將存儲(chǔ)在變量對(duì)象中的值復(fù)制一份放到為新變量準(zhǔn)備的空間中。但是這個(gè)值的副本實(shí)際上是個(gè)指針潜叛。復(fù)制結(jié)束后兩個(gè)變量實(shí)際上引用同一個(gè)對(duì)象秽褒。
參數(shù)只能按值傳遞。

instanceof()威兜,檢測(cè)引用類型的值销斟。如果變量是給定引用類型(有Object、Array椒舵、RegExp等)蚂踊,返回true。如person instanceof Object如果person是對(duì)象返回true笔宿。

ESCA-262規(guī)定任何在內(nèi)部實(shí)現(xiàn)[[Call]]方法的對(duì)象都應(yīng)該在應(yīng)用typeof時(shí)返回function犁钟。因此typeof 正則表達(dá)式 返回function棱诱,在IE和Firefox中,返回object涝动。

4.2 執(zhí)行環(huán)境及作用域

每個(gè)環(huán)節(jié)都可以向上搜索作用域鏈迈勋,以查詢變量和函數(shù)名;但任何環(huán)境都不能通過(guò)向下搜索作用域鏈而進(jìn)入另一個(gè)執(zhí)行環(huán)境醋粟。

try-catch語(yǔ)句的catch塊和with語(yǔ)句可以延長(zhǎng)作用域靡菇,在作用域鏈的前端臨時(shí)增加一個(gè)變量對(duì)象,該對(duì)象會(huì)在代碼執(zhí)行后被移除米愿。

p75 4.2.1中url作用域被延長(zhǎng)厦凤?(why?)

4.3 垃圾收集

解除引用育苟,一旦數(shù)據(jù)不再有用泳唠,最好通過(guò)將其值設(shè)置為null來(lái)釋放其引用。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末宙搬,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子拓哺,更是在濱河造成了極大的恐慌勇垛,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,427評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件士鸥,死亡現(xiàn)場(chǎng)離奇詭異闲孤,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)烤礁,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,551評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門讼积,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人脚仔,你說(shuō)我怎么就攤上這事勤众。” “怎么了鲤脏?”我有些...
    開(kāi)封第一講書人閱讀 165,747評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵们颜,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我猎醇,道長(zhǎng)窥突,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書人閱讀 58,939評(píng)論 1 295
  • 正文 為了忘掉前任硫嘶,我火速辦了婚禮阻问,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘沦疾。我一直安慰自己称近,他們只是感情好第队,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,955評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著煌茬,像睡著了一般斥铺。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上坛善,一...
    開(kāi)封第一講書人閱讀 51,737評(píng)論 1 305
  • 那天晾蜘,我揣著相機(jī)與錄音,去河邊找鬼眠屎。 笑死剔交,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的改衩。 我是一名探鬼主播岖常,決...
    沈念sama閱讀 40,448評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼葫督!你這毒婦竟也來(lái)了竭鞍?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 39,352評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤橄镜,失蹤者是張志新(化名)和其女友劉穎偎快,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體洽胶,經(jīng)...
    沈念sama閱讀 45,834評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡晒夹,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,992評(píng)論 3 338
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了姊氓。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片丐怯。...
    茶點(diǎn)故事閱讀 40,133評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖翔横,靈堂內(nèi)的尸體忽然破棺而出读跷,到底是詐尸還是另有隱情,我是刑警寧澤棕孙,帶...
    沈念sama閱讀 35,815評(píng)論 5 346
  • 正文 年R本政府宣布舔亭,位于F島的核電站,受9級(jí)特大地震影響蟀俊,放射性物質(zhì)發(fā)生泄漏钦铺。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,477評(píng)論 3 331
  • 文/蒙蒙 一肢预、第九天 我趴在偏房一處隱蔽的房頂上張望矛洞。 院中可真熱鬧,春花似錦、人聲如沸沼本。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 32,022評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)抽兆。三九已至识补,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間辫红,已是汗流浹背凭涂。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,147評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留贴妻,地道東北人切油。 一個(gè)月前我還...
    沈念sama閱讀 48,398評(píng)論 3 373
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像名惩,于是被迫代替她去往敵國(guó)和親澎胡。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,077評(píng)論 2 355

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