第一章 JavaScript簡介
1、一個完整的JavaScript實現,應該由一下三個部分組成:
- 核心(ECMAScript):提供核心語言功能。
- 文檔對象模型(DOM):提供訪問和操作網頁內容的方法和接口。
- 瀏覽器對象模型(BOM):提供與瀏覽器交互的方法與接口。
第二章 在HTML中使用JavaScript
1、<script>元素
(1)<script> 定義了下列 6 個屬性:
- async :可選。表示應該立即下載腳本,但不應妨礙頁面中的其他操作,比如下載其他資源或等待加載其他腳本。只對外部腳本文件有效。
- charset :可選。表示通過 src 屬性指定的代碼的字符集。由於大多數瀏覽器會忽略它的值,因此這個屬性很少有人用。
- defer :可選。表示腳本可以延遲到文檔完全被解析和顯示之後再執行。只對外部腳本文件有效。IE7 及更早版本對嵌入腳本也支持這個屬性。
- language :已廢棄。原來用於表示編寫代碼使用的腳本語言(如 JavaScript 、 JavaScript1.2或 VBScript )。大多數瀏覽器會忽略這個屬性,因此也沒有必要再用了。
- src :可選。表示包含要執行代碼的外部文件。
- type :可選。可以看成是 language 的替代屬性;表示編寫代碼使用的腳本語言的內容類型(也稱爲 MIME 類型)。雖然 text/javascript 和 text/ecmascript 都已經不被推薦使用,但人們一直以來使用的都還是 text/javascript
(2)帶有src屬性的<script></script>標籤之間,不應該再包含額外的JavaScript代碼。如果包含了嵌入的代碼,只會下載並執行外部的腳本文件,嵌入的代碼會被忽略。
(3)src屬性支持引入外部域的完整的URL。例如:
<script type="text/javascript" src="http://www.somewhere.com/afile.js"></script>
(4)<script>標籤的位置,放在<head>中會影響頁面的加載速度,在將script下載,解析,執行完之後纔開始呈現頁面的內容。所以將<script>標籤放在<body>中頁面內容的後面,這樣在解析js代碼之前,頁面內容將完全呈現在瀏覽器中,不會顯示空白頁面,會使用戶感覺頁面的加載速度變快了。
(5)defer屬性相當於告訴瀏覽器:立即下載,但延遲執行,腳本會被延遲到整個頁面解析完畢後再運行。延遲腳本不一定會按照順序執行,因此最好只包含一個延遲腳本。例如:
<script type="text/javascript" defer="defer" src="example1.js"></script>
(6)若同時存在兩個script使用async,則確保兩者之間互不依賴非常重要。指定 async 屬性的目的是不讓頁面等待兩個腳本下載和執行,從而異步加載頁面其他內容。
爲此,建議異步腳本不要在加載期間修改 DOM。
第三章 基本概念
1、typeof是一個操作符而不是函數,所以要得到一個變量的類型可以:typeof 變量,圓括號是可以省略的,不是必須的。
2、從邏輯角度來看, null 值表示一個空對象指針,而這也正是使用 typeof 操作符檢測 null 值時會返回 "object" 的原因。
typeof(null) // "object"
3、當字符串轉換爲Boolean值時,任何非空字符串轉換爲true,空字符串""轉換爲false。
4、數值的精度:
浮點數值的最高精度是 17 位小數,但在進行算術計算時其精確度遠遠不如整數。例如:0.1+0.2的結果不是0.3,而是 0.30000000000000004。
5、確定一個數值是不是有窮的,可用isFinite() 函數,這個函數在參數位於最小與最大數值之間時會返回 true,ECMAScript 能夠表示的最小數值保存在 Number.MIN_VALUE 中——在大多數瀏覽器中,這個值是 5e-324;能夠表示的最大數值保存在
Number.MAX_VALUE 中——在大多數瀏覽器中,這個值是 1.7976931348623157e+308。
6、NaN:非數值。有兩個特點:首先,任何涉及NaN的操作,都會返回NaN。其次,NaN和任何值都不相等,包括NaN本身。
7、位操作符:
(1)計算一個數的二進制補碼:
1.求這個數絕對值的二進制(32位)
2.求二進制反碼,1替換爲0,0替換爲1
3.得到的二進制反碼加1
(2)按位非(NOT)
按位非操作符由一個波浪線(~)表示,執行按位非的結果就是返回數值的反碼。按位非是
ECMAScript 操作符中少數幾個與二進制計算有關的操作符之一。
對 25 執行按位非操作,結果得到了-26。這也驗證了按位非操作的本質:操作數的負值減 1。
(3)按位與(AND)
(4)按位異或(XOR)
按位異或操作符由一個插入符號(^)表示,也有兩個操作數。相同爲0,不同爲1
(5)根據規則,任何操作數與 NaN 進行關係比較,結果都是 false 。
(6)相等操作符
"55"==55 true
"55"===55 false
8、函數中,可以使用arguments來訪問函數的參數,函數的參數依次爲arguments[0],arguments[1]...,通過arguments.length來獲取函數的參數個數。