1. 程式人生 > >《JavaScript高階程式設計(第三版)》讀書筆記 (一)

《JavaScript高階程式設計(第三版)》讀書筆記 (一)

《JavaScript高階程式設計(第三版)》讀書筆記

本文內容是關於《JavaScriptt高階程式設計(第三版)》的讀書筆記,而且只是提取個人認為每個章節比較重要或者需要注意的知識點。

第一章   JavaScript簡介

1.      一個完整的JavaScipt實現是有三個不同的部分組成的

1.1    核心(ECMAScript)

由ECMA-262定義,提供核心語言功能;它規定這門語言的組成部分,包括語法、型別、語句、關鍵字、保留字、操作符和物件。ECMAScript就是對實現該標準規定的各個方面內容的描述。

1.2    文件物件模型(DOM)

DOM把整個頁面對映為一個多層節點的結構,如下面所示

<html>

    <head>

      <title>

                     Test!

     </title>

   </head>

    <body>

   </body>

</html>               

上面程式碼會被對映成多層節點的結構

  


               文件物件模型(DOM)提供訪問和操作網頁內容的方法和介面

1.3    瀏覽器物件模型(BOM)

BOM提供與瀏覽器互動的方法和介面。

第二章   在HTML中使用JavaScript

1.      <script>元素的屬性

使用defer屬性可以讓指令碼在文件完全呈現之後再執行。延遲指令碼總是按照指定它們的順序執行。

使用asymc屬性可以表示當前指令碼不必等待其他指令碼,也不必阻塞文件的呈現。不能保證非同步指令碼按照它們的頁面中出現的順序執行。

在不使用上面兩個屬性時,瀏覽器會先解析<script>元素中的程式碼,然後在解析後面的內容。

第三章   基本概念

1.      資料型別

ECMAScript有5種簡單資料型別(基本資料型別):Undefined、Null、Boolean、Number和String。還有一個複雜的資料型別Object。

2.      變數

注意的是,如果在函式中定義變數省略了var操作符,那麼該變數是一個全域性變數。

3.      操作符

3.1   位操作符

ECMAScript中的所有數值都以IEEE-754 64位格式儲存,但未操作符並不直接操作64位的值。而是先將64位的值轉換成32位的整數,然後在執行操作,最後再將結果轉換成64位。

對於有符號的整數,32位中的前31位用於表示整數的值,第32位是符號位,0表示正數,1表示負數,31位中的每一位都表示2的冪。

eg:數值16的的二進位制表示為00000000000000000000000000010000

或者更簡潔的10000

1

0

0

0

0

(2^4)*1    +   (2^3)*0  +   (2^2)*0   +  (2^1)*0  +   (2^0)*0

16

0

0

0

0

負數以二進位制儲存時,使用的是二進位制的補碼,而計算一個數值的二進位制補碼一般有三個步驟

(1)    求該值絕對值的二進位制碼;

(2)    求二進位制反碼,即1變成0,0變成1;

(3)    得到的二進位制反碼再加1。

如下列用以上三個步驟得到-16的二進位制碼

(1)    轉換成16的二進位制碼

0000 0000 0000 0000 0000 0000 0001 0000

(2)    然後求其反碼

1111 1111 1111 1111 1111 1111 1110 1111

(3)    最後反碼加1

1111 1111 1111 1111 1111 1111 1110 1111

                                                                                 1

——————————————————

1111 1111 1111 1111 1111 1111 1111 0000

即獲得-16的二進位制碼是1111 1111 1111 1111 1111 1111 1111 0000

3.1.1         按位非(NOT)

按位非操作符有一個波浪線(~)表示,按位非的結果就是返回數值的反碼

3.1.2         按位與(AND)

按位與操作符由一個和號字元(&)表示,按位與操作就是兩個數值的對應位都是1時才返回1,任何一位是0,結果都是0

簡單的例子  8&3

9 = 0000 0000 0000 0000 0000 0000 00001001

3 = 0000 0000 0000 0000 0000 0000 00000011

---------------------------------------------------------------

AND = 0000 0000 0000 0000 0000 00000000 0001

3.1.3         按位或(OR)

按位或操作是由一個豎線符號(|)表示,同樣也有兩個運算元

和按位與不同的是,按位或操作只要有一位是1的情況下都會返回1,而只有在兩個位都是0的情況下才返回0

3.1.4         按位異或(XOR)

按位異或操作符有一個插入符號(^)表示,也有兩個運算元。

這個操作在兩個數值對應位上只有一個1是才返回1,如果對應的兩位都是1或者都是0,則返回0。

3.1.5         左移

左移操作符有兩個小於號(<<)表示,這個操作符會將數值的所有位向左移動指定的位數

簡單例子:將數值3(二進位制碼為11)向左移5位

注意:在向左移位後,原數值的右側多出了5個空位。左移操作會以0來填充這些空位,以便得到的結果是完整的32位二進位制

數值3

0000 0000 0000 0000 0000 0000 0000 0011

將數值3向左移5位(得到96)

0000 0000 0000 0000 0000 0000 0110 0000

右側空餘的5位,以0來填充

3.1.6         有符號的右移

有符號的右移操作符是由兩個大於號(>>)表示,這個操作符會將數值向右移,但保留符號位;右移後,左側空出的位置會用符號位的值來填充所有的空位

3.1.7         無符號右移

無符號右移操作符是由3個大於號(>>>)表示,對於正數來說,無符號右移的結果和有符號右移的結果是一樣的;但是對負數來說,無符號右移是以0來填充空位,而不是像有符號右移那樣以符號位的值來填充空位。

4.      With語句

with語句的作用是將程式碼的作用域設定到一個特定的物件中

with語句的語法如下:

with(expression) statement

定義with語句的目的主要是為了簡化多次編寫同一個物件的工作,如下面的例子所示

var q =location.search.substring(1);

var name =location.name;

var url =location.href;

上面的幾行程式碼都包含了location物件。如果使用with語句,可以寫成

with(locaiton){

        var q = search.substring(1);

      varname = name;

        var url = href;

}

在這個重寫後的例子中,使用with語句關聯了location物件,意味著在with語句的程式碼塊內部,每個變數首先被認為是一個區域性變數,而如果在區域性環境中找不到該變數的定義,就會查詢location物件中是否有同名的屬性。如果發現了同名屬性,則以location物件屬性的值作為變數的值。

注意的是,在嚴格模式下不允許使用with語句,否則將視為語法錯誤(不建議使用with語句,因為由於大量使用with語句會導致效能下降,同時也會給除錯程式碼造成困難)

5.      函式

ECMAScript函式不能實現過載