《JavaScript 語(yǔ)言精粹》 - 閱讀索引

閱讀總結(jié)

一本 12 年修訂(09 年初版)的過(guò)時(shí)的書(shū),很多點(diǎn)在 ES6 甚至 ES5 之后都沒(méi)有再關(guān)心的必要了。也可能是年代久遠(yuǎn)的原因,作者的很多觀點(diǎn)看上去帶有比較強(qiáng)的主觀性。總之,在今天,本書(shū)已經(jīng)帶來(lái)不了太多的收獲了。


[toc]

第 1 章 精華

  • JavaScript 糟粕的比重大,但有一些非常精華的部分
  • 標(biāo)準(zhǔn)委員會(huì)無(wú)法移除缺陷特性,需要開(kāi)發(fā)者自己定義精華的子集

為什么要使用 JavaScript

分析 JavaScript

  • 函數(shù)式特性
  • 弱類(lèi)型
  • 對(duì)象字面量表示法
  • 原型繼承
  • 原型繼承
  • 全局變量

一個(gè)簡(jiǎn)單的試驗(yàn)場(chǎng)


第 2 章 語(yǔ)法

  • 介紹精華部分的語(yǔ)法,概述其語(yǔ)言結(jié)構(gòu)
  • 使用鐵路圖(語(yǔ)法圖)描述語(yǔ)法

空白

標(biāo)識(shí)符

  • 由一個(gè)字母開(kāi)頭,可包含字母、數(shù)字、下劃線

數(shù)字

  • 只有一個(gè)數(shù)字類(lèi)型
    • 64 位浮點(diǎn)數(shù)
    • 沒(méi)有整數(shù)類(lèi)型
    • 避免了短整型溢出等數(shù)組類(lèi)型導(dǎo)致的錯(cuò)誤
  • Math

字符串

  • / 轉(zhuǎn)義
  • 沒(méi)有字符類(lèi)型,只需要?jiǎng)?chuàng)建一個(gè)字符串表示字符

語(yǔ)句

  • 條件、循環(huán)、強(qiáng)制跳轉(zhuǎn)等語(yǔ)句

表達(dá)式

  • % 是求余,而不是求模
  • () 函數(shù)調(diào)用運(yùn)算符

字面量

  • 對(duì)象字面量
  • 數(shù)組字面量

函數(shù)


第 3 章 對(duì)象

  • 可變的鍵控集合
  • 屬性的容器
  • 無(wú)類(lèi)型
  • 原型鏈

對(duì)象字面量

  • var obj = { a: 1 }

檢索

  • .
  • [ ]

更新

引用

原型

  • Object.create
  • 原型鏈、委托、動(dòng)態(tài)

反射

  • 檢查對(duì)象屬性
  • hasOwnProperty

枚舉

  • for...in

刪除

  • delete a.b 不會(huì)刪除原型鏈上的屬性

減少全局變量污染

  • 作為一個(gè)全局變量的屬性

第 4 章 函數(shù)

  • JavaScript 接近于完美的函數(shù)設(shè)計(jì)

函數(shù)對(duì)象

  • Function.prototype
  • Function.prototype.constructor

函數(shù)字面量

  • var f = function () {}

調(diào)用

  • 調(diào)用一個(gè)函數(shù)會(huì)暫停當(dāng)前函數(shù)的執(zhí)行

方法調(diào)用模式

  • this 指向方法所屬的對(duì)象

函數(shù)調(diào)用模式

  • this 指向全局對(duì)象

構(gòu)造器調(diào)用模式

  • this 指向新對(duì)象

Apply 調(diào)用模式

  • this 指向第一個(gè)參數(shù)

參數(shù)

  • arguments 并不是一個(gè)好的設(shè)計(jì)

返回

  • new 調(diào)用,且返回值不是對(duì)象,則返回 this

異常

  • throw exception
  • exception 包含 namemessage 屬性
  • try...catch 中通過(guò) exceptionname 來(lái)區(qū)分錯(cuò)誤類(lèi)型

擴(kuò)充類(lèi)型的功能

  • Function.prototype.method

遞歸

  • 自相似問(wèn)題
  • 尾遞歸優(yōu)化

作用域

閉包

回調(diào)

模塊

  • 使用函數(shù)和閉包來(lái)構(gòu)造模塊

級(jí)聯(lián)

  • 函數(shù)鏈

柯里化

記憶


第 5 章 繼承

  • 對(duì)象從其他對(duì)象繼承

偽類(lèi)

  • 構(gòu)造器函數(shù)是糟糕的設(shè)計(jì)
  • 隱藏了原型繼承的本質(zhì)(看上去像不完整的類(lèi)繼承)
  • 沒(méi)有 new 時(shí)會(huì)破壞全局環(huán)境
  • 許多復(fù)雜的類(lèi)層次結(jié)構(gòu)產(chǎn)生的原因是靜態(tài)類(lèi)型檢查的約束,而 JavaScript 完全擺脫了約束,因此在代碼重用上可以有更多更好的選擇

對(duì)象說(shuō)明符

  • object 形式的參數(shù)

原型

  • 專(zhuān)注于對(duì)象,概念上更簡(jiǎn)單

函數(shù)化

  • 利用閉包隱藏私有變量

部件

  • 事件處理部件的 ??

第 6 章 數(shù)組

  • 數(shù)組是一段線性分配的內(nèi)存,通過(guò)整數(shù)計(jì)算偏移并訪問(wèn)其中的元素,是一種性能出色的數(shù)據(jù)結(jié)構(gòu)
  • 但 JavaScript 并沒(méi)有真正的數(shù)組,只有類(lèi)數(shù)組特性的對(duì)象,以字符串作為數(shù)組下標(biāo)

數(shù)組字面量

長(zhǎng)度

  • 最大整數(shù)屬性名 +1
  • 可以直接設(shè)置 length,設(shè)小將刪除剩余元素

刪除

  • splice,會(huì)導(dǎo)致后續(xù)的每一個(gè) key-value 變化,因此性能不高

枚舉

容易混淆的地方

  • 判斷 ObjectArray 類(lèi)型

方法

指定初始值


第 7 章 正則表達(dá)式

  • JavaScript 的正則表達(dá)式借鑒子 Perl
  • JavaScript 中正則表達(dá)式相較于等效的字符串處理有顯著的性能優(yōu)勢(shì)
  • 簡(jiǎn)潔但閱讀性極差,難以修改

一個(gè)例子

  • 匹配 URL
  • 匹配數(shù)字

結(jié)構(gòu)

  • 標(biāo)識(shí)符 g, i, m(多行)
  • RegExp 對(duì)象,反斜杠在字符串下需要轉(zhuǎn)義,通常需要雙寫(xiě)反斜杠

元素

正則表達(dá)式分支

  • |

正則表達(dá)式序列

  • 一個(gè)序列包含一個(gè)或多個(gè)正則表達(dá)式因子,每個(gè)因子可以跟隨一個(gè)量詞

正則表達(dá)式因子

  • 一個(gè)因子可以是一個(gè)字符、一個(gè)由圓括號(hào)包圍的組、一個(gè)字符類(lèi)、一個(gè)轉(zhuǎn)義序列

正則表達(dá)式轉(zhuǎn)義

  • \1 是指向分組 1 所捕獲到的文本的一個(gè)引用,所有能被再次匹配,可以用來(lái)搜索重復(fù)的單詞

正則表達(dá)式分組

  • 捕獲型
  • 非捕獲型
  • 向前正向匹配(不好的特性)
  • 向前負(fù)向匹配(不好的特性)

正則表達(dá)式字符集

  • 匹配 ASCII 字符的 ??

正則表達(dá)式字符轉(zhuǎn)義

  • 需要被轉(zhuǎn)義的 -/[\]^

正則表達(dá)式量詞

  • 使用貪婪性匹配

第 8 章 方法

幾個(gè)不熟悉但實(shí)用的

  • String.prototype.lastIndexOf
  • Array.prototype.lastIndexOf
  • String.protoype.search
  • String.fromCharCode

第 9 章 代碼風(fēng)格


第 10 章 優(yōu)美的特性

  • 精簡(jiǎn)的 JavaScript
    • 函數(shù)是頂級(jí)對(duì)象
    • 基于原型繼承的動(dòng)態(tài)對(duì)象
    • 對(duì)象字面量和數(shù)組字面量
  • 特性成本

附錄 A 毒瘤

  • 一些難以避免的問(wèn)題特性

全局變量

作用域

自動(dòng)插入分號(hào)

保留字

Unicode

typeof

parseInt

  • 遇到非數(shù)字會(huì)停止解析而不拋錯(cuò)誤
  • 0 開(kāi)頭的字符串會(huì)被基于八進(jìn)制求值

+

浮點(diǎn)數(shù)

  • 0.1 + 0.2 = 0.30000000000000004 但這是遵循二進(jìn)制浮點(diǎn)數(shù)算數(shù)標(biāo)準(zhǔn)的

NaN

  • NaN === NaN false

偽數(shù)組

假值

  • null == undefined true

hasOwnProperty

  • 是方法而不是以運(yùn)算符

對(duì)象


附錄 B 糟粕

  • 可以避免的問(wèn)題特性

==

with

eval

  • 同樣的還有 Function 構(gòu)造器、接受字符串參數(shù)時(shí)的 setTimeout/setInterval

continue 語(yǔ)句

  • 性能不好

switch 穿越

缺少塊的語(yǔ)句

++ --

  • 鼓勵(lì)了一種不夠謹(jǐn)慎的編程風(fēng)格

位運(yùn)算符

  • JavaScript 的執(zhí)行環(huán)境接觸不到硬件,因此位運(yùn)算性能差

function 語(yǔ)句對(duì)比 function 表達(dá)式

類(lèi)型的包裝對(duì)象

  • 避免使用 new Object

new

void


附錄 C - E 跳過(guò)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • JavaScript語(yǔ)言精粹 前言 約定:=> 表示參考相關(guān)文章或書(shū)籍; JS是JavaScript的縮寫(xiě)。 本書(shū)...
    微笑的AK47閱讀 663評(píng)論 0 3
  • 概要 64學(xué)時(shí) 3.5學(xué)分 章節(jié)安排 電子商務(wù)網(wǎng)站概況 HTML5+CSS3 JavaScript Node 電子...
    阿啊阿吖丁閱讀 9,880評(píng)論 0 3
  • 第3章 基本概念 3.1 語(yǔ)法 3.2 關(guān)鍵字和保留字 3.3 變量 3.4 數(shù)據(jù)類(lèi)型 5種簡(jiǎn)單數(shù)據(jù)類(lèi)型:Unde...
    RickCole閱讀 5,543評(píng)論 0 21
  • 第5章 引用類(lèi)型(返回首頁(yè)) 本章內(nèi)容 使用對(duì)象 創(chuàng)建并操作數(shù)組 理解基本的JavaScript類(lèi)型 使用基本類(lèi)型...
    大學(xué)一百閱讀 3,691評(píng)論 0 4
  • 對(duì)于“冥想”一詞的認(rèn)識(shí),起初在頭腦中反應(yīng)的畫(huà)面是,如佛或仙一般端坐在那里,擺出固定的姿勢(shì),讓自己保持一動(dòng)不動(dòng)的樣子...
    小汐0314閱讀 141評(píng)論 0 1

友情鏈接更多精彩內(nèi)容