《javascript 進階程式設計》筆記

來源:互聯網
上載者:User

1. type(null)==object  ---------->實際上是javascript最初實現的一個錯誤,被ECMAScript沿用了。現在認為null是對象的預留位置,從而解決了這一矛盾,但從技術上來說,它仍是原始值。
2. Undefined 類型只有一個值,即 undefind 。當聲明的變數未初始化時,該變數的預設值是 undefined 。
3. Null 類型,只有一個專用值 null ,即它的字面量,值 undefined 實際上是從值 null 派生來的,所以 ECMAScript 把它們定義為相等,alert(null==undefined);//true
4. Number 類型,既可以表示32位的整數,也可以表示64位的浮點數。
5. 浮點字面量的有趣之處:用它進行計算前,真正儲存的是字串。
6. 特殊值:Number.MAX_VALUE 和 Number.MIN_VALUE,超出這個邊界的數不再具有數字值,產生的結果不能再用於其他計算,分別被賦予值:Number.POSITIVE_INFINITY 和 Number.NEGERTIVE_INFINITY
7. 有專門的值表示無窮大,即 Infinity (等於Number.POSITIVE_INFINITY ),-Infinity (等於 Number.NEGERTIVE_INFINITY)
8. NaN :表示非數(Not a number),一般在類型轉換失敗時,注意:其與自身不相等:alert(NaN==NaN);//false
9. toString(TYPE,[基數])、parseInt(0XA返回10)、parseFloat(只能以十進位表示,忽略前置0,0XA 返回0) ,第一個字元無效(不是數字或十六進位)就返回NaN
10. var o = new object; // var o = new object();也可以,但是為了避免混亂,最好使用括弧。
11. Object 類屬性:Constructor -----對建立對象的函數的引用,指向原始的object()函數
                   Prototype  ------對該對象的對象的原型的引用,它預設返回Object對象的一個執行個體。
12. Boolean 類:是Boolean 原始類型的參考型別。-------> var oFalseObject = new Bloolean(false); var bResult = oFalseObject && true; //bResult等於true , 注意與Boolean原始值的區別,Boolean對象都被轉化為true               
13. 沒有傳回值的函數的真正返回的都是 undefined
14. 一元加法/減法:對於數字無本質影響;但是對於字串,會把字串轉化為數字,但是:只對於以0X開頭的才轉化為10進位,以0開頭的不轉為八進位
15. 所有整數字面量,預設儲存為有符號整數,只有用ECMAScript的位元運算符才能建立不帶正負號的整數。
16. Undefined 類型進行非運算,發生錯誤
17. 邏輯AND:
            一個運算數是對象,一個是Blooean型----------> 返回該對象
            兩個都是對象 ------------------------------> 返回第二個對象
            某個是null --------------------------------> 返回null
            某個是NaN  --------------------------------> 返回NaN
            某個是undefined  --------------------------> 發生錯誤
            
18. 邏輯OR:
            一個運算數是對象,一個是Blooean型----------> 返回該對象
            兩個都是對象 ------------------------------> 返回第一個對象
            某個是null --------------------------------> 返回null
            某個是NaN  --------------------------------> 返回NaN
            某個是undefined  --------------------------> 發生錯誤
            
19.乘法:    
        某個是NaN ----------------> 結果為 NaN
        Infinity * 0  ------------> 結果為 NaN
        Infinity * n(非0的數) ----> 結果為 Infinity / -Infinity
        Infinity * Infinity  -----> 結果為 Infinity
        
20.除法:        
        某個是NaN ----------------> 結果為 NaN
        n / 0    -----------------> 結果為 NaN
        Infinity / n -------------> 結果為 Infinity
        Infinity / Infinity  -----> 結果為 NaN        
            
21.模數:
        除數為無窮大的數 ---------> 結果為被除數
        其餘為 NaN 或者正常運算
        
22.加法:
        Infinity 加(-Infinity) ------> NaN
        +0 加 -0 --------------------> +0
        -0 加 -0 --------------------> -0
        +0 加 +0 --------------------> +0
        其中有字串 ----------------> 轉化其他類型為字串在串接起來

22.減法:
        Infinity  減(-Infinity) ------> Infinity
        -Infinity 減(-Infinity) -----> NaN
        -Infinity 減 Infinity -------> -Infinity
        Infinity  減 Infinity -------> NaN
        +0 減 -0 --------------------> +0
        -0 減 -0 --------------------> -0
        +0 減 +0 --------------------> +0
        某個運算元不是數字 ----------> NaN        
            
注意:任何包含NaN的關係運算都返回false

23. 等號和非等號
在 ECMAScript 中,等號由雙等號(==)表示,若且唯若兩個運算數相等時,它返回 true。非等號由驚嘆號加等號(!=)表示,若且唯若兩個運算數不相等時,它返回 true。為確定兩個運算數是否相等,這兩個運算子都會進行類型轉換。
執行類型轉換的規則如下:
    如果一個運算數是 Boolean 值,在檢查相等性之前,把它轉換成數字值。false 轉換成 0,true 為 1。
    如果一個運算數是字串,另一個是數字,在檢查相等性之前,要嘗試把字串轉換成數字。
    如果一個運算數是對象,另一個是字串,在檢查相等性之前,要嘗試把對象轉換成字串。
    如果一個運算數是對象,另一個是數字,在檢查相等性之前,要嘗試把對象轉換成數字。

在比較時,該運算子還遵守下列規則:
    值 null 和 undefined 相等。
    在檢查相等性時,不能把 null 和 undefined 轉換成其他值。
    如果某個運算數是 NaN,等號將返回 false,非等號將返回 true。
    如果兩個運算數都是對象,那麼比較的是它們的引用值。如果兩個運算數指向同一對象,那麼等號返回 true,否則兩個運算數不等。

重要提示:即使兩個數都是 NaN,等號仍然返回 false,因為根據規則,NaN 不等於 NaN。    
運算式                 值
null == undefined     true
"NaN" == NaN         false
5 == NaN             false
NaN == NaN             false
NaN != NaN             true
false == 0             true
true == 1             true
true == 2             false
undefined == 0         false
null == 0             false
"5" == 5             true

24.    label:    
    如: start:var iNum = 10;
    break 與 continue 都可以與帶有標籤的語句聯合使用,傳回碼中的特定位置;break start;

25. with 語句:用於設定代碼在特定對象中的範圍。    
    它的文法:
    with (expression) statement
    例如:
    var sMessage = "hello";
    with(sMessage) {
      alert(toUpperCase());    //輸出 "HELLO"
    }

    在這個例子中,with 語句用於字串,所以在調用 toUpperCase() 方法時,解釋程式將檢查該方法是否是本地函數。如果不是,它將檢查偽對象 sMessage,看它是否為該對象的方法。然後,alert 輸出 "HELLO",因為解釋程式找到了字串 "hello" 的 toUpperCase() 方法。
    提示:with 語句是運行緩慢的代碼塊,尤其是在已設定了屬性值時。大多數情況下,如果可能,最好避免使用它。            
                
26. 無重載:ECMAScript 中的函數不能重載,但是可以用相同的名字在同一個範圍中定義兩個函數,而不會發生錯誤,但真正使用的是最後一個函數,後面的函數的定義覆蓋了前面的函數定義。
27. arguments 對象:在函數代碼中使用特殊對象 arguments 對象,開發人員無需明確指出參數名,就可以訪問他們。ECMAScript 不會驗證傳遞給函數的參數的個數是否等於函數定義的參數個數,開發人員定義的函數都可以接受任意個數的參數。
28. Function 類:var function_name = new Function(argument1,argument2...argumentN,function_body);    
             例:var func_add = new Function(argument1,argument2,"alert(argument1+argument2)");    
             儘管可以這樣建立函數,但是這樣比傳統方式慢的多,最好不這樣做,不過,所有的函數都應看做 Function 類的執行個體。
29. 閉包(closure):函數使用函數外定義的變數。
30. 本機物件:ECMA-262 把本機物件(native object)定義為“獨立於宿主環境的 ECMAScript 實現提供的對象”。簡單來說,本機物件就是 ECMA-262 定義的類(參考型別)。它們包括: Object、Function、Array、String、Boolean、Number、Date、RegExp、Error、EvalError、RangeError、ReferenceError、SyntaxError、TypeError、URIError等
31. 內建對象:ECMA-262 把內建對象(built-in object)定義為“由 ECMAScript 實現提供的、獨立於宿主環境的所有對象,在 ECMAScript 程式開始執行時出現”。這意味著開發人員不必明確執行個體化內建對象,它已被執行個體化了。ECMA-262 只定義了兩個內建對象,即 Global 和 Math (它們也是本機物件,根據定義,每個內建對象都是本機物件,Global對象實際上不存在,undefined、NaN、Infinity都是Global對象的屬性,所有本機物件的建構函式也都是Global對象的屬性)。
32. 宿主對象:所有非本機物件都是宿主對象(host object),即由 ECMAScript 實現的宿主環境提供的對象。所有 BOM 和 DOM 對象都是宿主對象。
33. ECMAScript 只有公用範圍:ECMAScript 中的所有對象的所有屬性和方法都是公用的。由於缺少私人範圍,開發人員確定了一個規約,說明哪些屬性和方法應該被看做私人的。這種規約規定在屬性前後加底線:obj._color_ = "blue";注意,底線並不改變屬性是公用屬性的事實,它只是告訴其他開發人員,應該把該屬性看作私人的。
34. 函數是對象,對象可以有屬性和方法。例如:
        function sayHello()
        {
          alert("hello");
        }

        sayHello.alternate = function() // alternate() 是 sayHello() 公用範圍中的方法
        {
          alert("hi");
        }

        sayHello();        //輸出 "hello"
        sayHello.alternate();    //輸出 "hi"

35. 關鍵字 this:它用在對象的方法中。關鍵字 this 總是指向調用該方法的對象。        
36. 極晚綁定(Very Late Binding:能夠在對象執行個體化後再定義它的方法。例如:
        var o = new Object();
        Object.prototype.sayHi = function ()
        {
          alert("hi");
        };
        o.sayHi();
                    
37. 繼承方式:
            * 對象冒充: 建構函式使用 this 關鍵字給所有屬性和方法賦值(即採用類聲明的建構函式方式),可使 ClassA 建構函式成為 ClassB 的方法,然後調用它。ClassB 就會收到 ClassA 的建構函式中定義的屬性和方法。
                        ECMAScript 的第三版為 Function 對象加入了兩個方法,即 call() 和 apply():
                        * call()方法: 它的第一個參數用作 this 的對象。其他參數都直接傳遞給函數自身.
                        * apply()方法:apply() 方法有兩個參數,用作 this 的對象和要傳遞給函數的參數的數組.
            * 原型鏈(prototype chaining): 實際上是把對象的所有方法複製給類的prototype對象。ClassB.prototype = new ClassA();
            * 混合方式:
            * 其他(庫):zInherit 庫 、xbObjectS 庫
            
38. getElementById();如果給定的ID匹配某個元素的name特性,IE6.0還會返回這個元素,這是一個bug,必須小心!    
            
           

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.