第1章 JavaScript簡介編程
1.一個完整的JavaScript實現應該由三部分組成:核心(ECMAScript),文檔對象模型(DOM)和瀏覽器對象模型(BOM)。數組
2.Web瀏覽器只是ECMAScript實現可能的宿主環境之一。宿主環境不只提供基本的ECMAScript實現,同時也會提供該語言的擴展,以便語言與環境之間對接交互。而這些擴展——如DOM,則利用ECMAScript的核心類型和語法提供更多更具體的功能,以便實現針對環境的操做。其餘宿主環境包括Node(一種服務端JavaScript平臺)。瀏覽器
3.DOM也是應用編程接口(API)。數據結構
第2章 在HTML中使用JavaScriptdom
1.帶有src屬性的<script>元素不該該在其<script>和</script>標籤之間再包含額外的JavaScript代碼。函數
第3章 基本概念性能
1.若是在函數中使用var定義一個變量,那麼這個變量在函數推出後就會被銷燬。測試
2.雖然省略var操做符能夠定義全局變量,但這不是咱們推薦的作法。優化
3.ECMAScript中有5種簡單數據類型(也成爲基本數據類型):Undefined、Null、Boolean、Number和String。還有1種複雜數據類型——Object,Object本質上是由一組無序的名值對組成的。Object類型不等於對象。ECMAScript種對象其實就是一組數據和功能的集合。this
4.包含undefined值的變量與還沒有定義的變量仍是不同的。對於後者,只能執行一項操做,即用typeof操做符檢測其數據類型。
5.只要意在保存對象的變量尚未真正保存對象,就應該明確地讓該變量保存null值。
6.永遠不要測試某個特定的浮點數值(即像這樣:a + b === 0.3)。
7.parseInt():不指定基數意味着讓parseInt()決定如何解析輸入的字符串,所以爲了不錯誤的解析,咱們建議不管在什麼狀況下都明確指定基數。
8.按位非操做的本質:操做數的負值減1。雖榮用一元減操做符和加法操做符也能實現一樣的效果,但因爲按位非是在數值表示的最底層執行操做,所以速度更快。
9.咱們能夠利用邏輯或的短路行爲來爲變量賦值提供後備值,以免爲變量賦null或undefined值。
10.忽視加法操做中的數據類型是ECMAScript編程中最多見的一個錯誤(好比用字符串和數值相加,數值會先被轉換成字符串)。
11.若有有一個操做數是NaN,則相等操做符返回false。即便兩個操做數都是NaN,相等操做符也返回false;由於按照規則,NaN不等於NaN。
12.因爲相等和不相等操做符存在類型轉換問題,而爲了保持代碼中數據類型的完整性,咱們推薦使用全等和不全等操做符。
13.咱們建議若是使用label語句,必定要使用描述性的標籤,同時不要嵌套過多的循環。
14.在函數體內能夠經過arguments對象來訪問參數數組,從而獲取傳遞給函數的每個參數。
15.ECMAScript函數有一個重要特色:命名的參數只提供便利,但不是必需的。
16.經過訪問arguments對象的length屬性能夠獲知有多少個參數傳遞給了函數。開發人員能夠利用這一點讓函數可以接收任意個參數並分別實現適當的功能。雖然這個特性算不上完美的重載,但也足夠彌補ECMAScript的這一缺憾了。
17.函數:沒有傳遞值的命名參數將自動被賦予undefined值。這就跟定義了變量但又沒有初始化同樣。
18.ECMAScript中的全部參數傳遞的都是值,不可能經過引用傳遞參數。
第4章 變量、做用域和內存問題
1.當從一個變量向另外一個變量複製引用類型的值時,和複製基本類型的值同樣,也會將存儲在變量對象中的值複製一份放到爲新變量分配的空間中。不一樣的是,這個值的副本其實是一個指針,兩個變量實際上將引用同一個對象。即基本類型的值是按值按值訪問的,引用類型的值是按引用訪問的。
2.ECMAScript中全部函數的參數都是按值傳遞的。
3.執行環境(execution context,有時也稱爲「環境」或「做用域」)是JavaScript中最爲重要的一個概念。執行環境的類型總共只有兩種——全局和局部(函數)。
4.JavaScript沒有塊級做用域。在其餘類C的語言中,由花括號封閉的代碼塊都有本身的做用域(用ECMAScript的話來說,就是它們本身的執行環境)。
5.確保佔用最少的內存可讓頁面得到更好的性能。而優化內存佔用的最佳方式,就是爲執行中的代碼只保存必要的數據。一旦數據再也不有用,最好經過將其值設置爲null來釋放其引用——這個作法叫作接觸引用(dereferencing)。這一作法適用於大多數全局變量和全局對象的屬性。局部變量會在它們離開執行環境時自動被解除引用。
第5章 引用類型
1.引用類型的值(對象)是引用類型的一個實例。在ECMAScript中,引用類型是一種數據結構,用於將數據和功能組織在一塊兒。它也常被稱爲類,但這種稱呼並不穩當。
2.對象字面量是向函數傳遞大量可選參數的首選方式。通常來說,命名參數雖然容易處理,但在有多個可選參數的狀況下就會顯得不夠靈活。最好的作法是對那些必需值使用命名參數,而使用對象字面量來封裝多個可選參數。
3.一般,除非必須使用變量來訪問對象的屬性,不然咱們建議使用點表示法而不是方括號表示法。
4.使用不帶圓括號的函數名是訪問函數指針,而非調用函數。
5.this引用的是函數執行的環境對象。在調用函數以前,this的值並不肯定。
6.必定要牢記,函數的名字僅僅是一個包含指針的變量而已。
7.對於ECMAScript中的引用類型而言,prototype屬性是保存它們全部實例方法的真正所在。換句話說,注入toString()和valueOf()等方法實際上都保存在prototype名下,只不過是經過各自對象的實例訪問罷了。
8.每一個函數繼承的toLocaleString()和toString()方法始終都返回函數的代碼(在調試代碼時頗有用)。
9.基本類型值不是對象(引用類型值纔是),於是從邏輯上講它們不該該有方法,但從表面上看它們確實有方法。實際上,每當讀取一個基本類型值的時候,後臺就會建立一個對應的基本包裝類型(特殊的引用類型,包括Boolean、Number和String),從而讓咱們可以調用一些方法來操做這些數據。
10.靜態方法:只能被構造函數自己調用,而不能被實例調用。實例方法反之。
11.Global(全局)對象能夠說是ECMAScript中最特別的一個對象了,由於無論你從什麼角度上看,這個對象都是不存在的。ECMAScript中的Global對象在某種意義上是做爲一個終極的「兜底兒對象」來定義的。換句話說,不屬於任何其餘對象的屬性和方法,最終都是它的屬性和方法。事實上,沒有全局變量或全局函數;全部在全局做用域中定義的屬性和函數,都是Global對象的屬性。ECMAScript雖然沒有指出如何直接訪問Global對象,但Web瀏覽器都是將這個全局對象做爲window對象的一部分加以實現的。所以,在全局做用域中聲明的全部變量和函數,就都成爲了window對象的屬性和方法。JavaScript中的window對象除了扮演ECMAScript規定的Global對象的角色外,還承擔了不少別的任務。如下代碼是取得Global對象的另外一種方法(末尾有一對括號表示是一個當即調用的函數表達式)。
var global = function() {
return this;
} ();
12.Math.random()方法返回大於等於0小於1的一個隨機數。套用下面的公式,就能夠利用Math.random()從某個整數範圍內隨機選擇一個值。
值 = Math.floor(Math.random() * 可能的值的總數 + 第一個可能的值)
13.函數其實是對象。每一個函數都是Function類型的實例,並且都與其餘引用類型同樣具備屬性和方法。因爲函數是對象,所以函數名其實是一個指向函數對象的指針。
14.函數一般是使用函數聲明語法定義的,這與使用函數表達式定義函數的方式相差無幾,最後一種定義函數的方式是使用Function構造函數(從技術的角度講,這也是函數表達式)。