《Javascript學習指南》 讀書筆記

注:筆記中的頁碼均對應pdf電子書中的數字頁碼,非紙書中的實際頁碼

javascript 中 函數也可以作爲一個對象

兩個名詞:
BOM(Browser object model) 瀏覽器對象模型
DOM(Document object model) 文檔對象模型

變量的定義:
利用var定義局部變量,只能在定義的函數內部使用。如果去掉關鍵字var,變量就變成全局變量
(儘量少用全局變量,命名重複時會很麻煩)

數據類型:
鬆散類型:同一個程序中,相同的變量可以保存不同的數據類型
數據類型:
字符串(用單引號 或 雙引號 都可以)
數字(可以是十進制的浮點數,科學計數法的數值、也可以是十六進制數)
布爾
(每種基本數據類型 會 對應一種內建對象,帶有各自的屬性和方法)

雙重否定符:!! 可以顯式地將非boolean類型的變量轉換爲布爾值
         如: var strName = "Someletters"
          var boolName = !!strName    //這個變量的值將是 true

常量的定義,用關鍵字const : const NAME = "Someletters"      NAME 就不再是一個變量,不能再賦值
                     常量儘可能是全局常量,且命名用全部字母大寫

在javascript中,3/2的計算結果不取整,而是1.5的浮點數

弱類型的體現:
如果只是判斷值得相等 ,只需要用兩個等號,不需要轉換數據類型,例:3==3 和 3==“3” 是等效的
如果要判斷的數據的值和類型都相同,則需要用三個等號,例:3===“3” 則是錯的,返回false
同理,用 != 表示不相等,而用 !== 表示不相同
同理,大於、小於、等的關係操作符也會自動進行類型的轉換再進行比較。僅限引號內部是數字時
注意:當操作符是 + 號時,如果+前出現的是字符串,則會把數字變爲字符串再拼接,與java一致!

流控制:
在javascript中:

                switch(變量){
                    case xx:
                } //其中的變量可以是字符串類型

**提高程序性能:
邏輯判斷遵循 最短路徑 的原理,所以編寫程序的時候,碰到與 或 語句時,第一個判斷式有講究。
例如,通常將判斷變量是否爲空作爲 邏輯判斷的 第一個表達式 p75

基本類型的對象:

    1. var myName = "Someletters";                 //隱式地創建一個String對象,用完後銷燬
    2. var myName = new String("Someletters");     //顯式地創建String對象
以上兩種方法下,myName可以調用String內建對象自帶的方法

Boolean對象可以用數字 1  或  0 來初始化,如:
      Boolean flag = new Boolean(0)  等價於   Boolean flag = new Boolean(false)
也可以用字符串來對Boolean對象初始化(空字符串等價於false,非空則爲true),如:
      Boolean flag = new Boolean("false")  等價於 Boolean flag = new Boolean(true)
3. 關於數字對象 Number及其方法,如:數字格式(保留幾位小數)、數字進制轉換 參見 P88

4. 字符串對象 可以通過 split 方法來分割,返回得到一個數組

日期對象:
可以通過格式正確的字符串來 創建日期對象,如:
var newDate = new Date(“March 12,1992 12:20:01”);
var newDate = new Date(‘March 12 1992’);
三個靜態方法:Date.now(當前日期和時間) Date.parse(毫秒數) Date.UTC(將日期轉爲毫秒數) P102

函數:
Javascript中的函數可以像 對象一樣使用,如將其輸出、賦值給某個變量或數組、作爲參數去傳遞

javascript函數類型:
顯示聲明的函數
匿名函數

瀏覽器調試:
Firebug調試:step over單步執行時,遇到有子函數的函數時,不進入子函數
step into單步執行時,遇見子函數就進入子函數繼續執行
step out 單步執行時,執行完該函數中餘下代碼並返回上一層函數

要在控制檯輸出時:使用console.log(“輸出內容”);如果輸出內容含有變量值,要用佔位符
%s(字符串) 或 %d(數字),如:

          function helloworld(){
            var  msg = "Hello,World";
            console.log("%s",msg);
          }

對象:
最上層:window 然後:document、history、navigator、location、screen、frames
location中有一個 計時器對象 (timer):
一次性的計時器:setTimeout(”函數名”,時間長度);
週期性計時器:setInterval(”函數名”,時間長度)

navigator對象可以用來檢查cookie是否啓用,或者瞭解用戶是用什麼瀏覽器訪問頁面的

document對象:
<a>標籤,擁有href屬性時,是一個超鏈接;擁有name屬性時,則是一個anchor(錨)
在html頁面中,可以直接通過標籤訪問對象。如:

            var img = document.img[0];//表示獲取該頁面中的第一張圖片對象

動態頁面:
兩個單詞的區分:Property和Attributes都是屬性的意思;
Property通常指對象、類的屬性;
Attribute通常指頁面元素的屬性;

JavaScript中使用CSS屬性名和樣式表中的屬性名通常是一樣的,但需要注意:
    ① css中有連字符的屬性,要去掉連字符並且第二個單詞大寫;
       如:border-radius則變爲 borderRadius;
    ② float在IE中變成 styleFloat;其他瀏覽器中變爲cssFloat;

JavaScript自定義對象:
1. JavaScript對象並不遵循傳統面嚮對象語言的 類和繼承規則,本質是面向 原型(Prototype);
2. JavaScript爲所有對象提供一個prototype屬性,該屬性可以用來給對象添加屬性和方法,從而擴展對象;P291
*. 面向對象的思想中的封裝,作用:方便傳遞值;隱藏實現細節;
3. 用prototype屬性擴展對象,然後封裝起來。這就是JS組件(如:AJAX)的基本原理
4. 在JavaScript中,函數也是一個對象,因此:function tune(){} //這段代碼可以看做是創建了一個殼對象
5. JavaScript的對對象的封裝有一個重要的作用是:解決瀏覽器兼容問題;如Ajax,它們在頁面載入(對象創建)
時,就檢查瀏覽器兼容問題,而代組件調用者無需知道怎麼檢查的;
6. 頁面元素可以 賦值 給新建對象的一個內部成員變量,以此來操縱修改該頁面元素的屬性或樣式;P303
7. 通過var關鍵字聲明的成員是私有成員,用this關鍵字聲明的成員則爲公共的;

JavaScript中對像的繼承(構造函數鏈):
1. apply:語法是 在對象A的構造函數中寫:對象B.apply(this,arguments);則對象B就成爲了對象A的一個屬性
2. call p307

JavaScript也可以使用try-catch(finally)來做異常處理;
JavaScript沙箱的概念:JavaScript不能訪問或修改本地系統文件;

Ajax:
原理:在同一個Web頁面文檔中完成:向服務器發出請求,調用一個服務,然後返回數據;
實現客戶端和服務器端的異步通信。它與傳統的表單提交的區別是:無需重新載入頁面;
XMLHttpRequest對象

Json:
輕量級的數據交換格式
只支持雙引號

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章