2009年9月24日 星期四

[JavaScript] Chapter 6&7 Notes

Reference: JavaScript - The Definitive Guide Chapter 6, Chapter 7
  • for/in loop: (section 6.9)
    1. 可以動態改變指定的 variable,例如下面這段程式碼複製 obj 的所有屬性名稱到 arr 中。
        var obj = {x:1, y:2, z:3};
        var arr = new Array( );
        var i = 0;
        for(arr[i++] in obj) /* empty loop body */;
      
    2. for/in 存取 property 並沒有依照某個順序,完全是 implementation-dependent,所以在 loop 中新增/刪除某個 property 要好好考慮。
  • with 指令會暫時改變 scope chain,雖然程式碼比較好寫,但執行效率會變差,盡量不要用。(section 6.18)

  • 當 object 用 obj["prop"] 來存取時,"prop"可以做 string 的操作,例如 obj["prop"+i] 動態決定要存取什麼屬性。如果用 obj.prop 的寫法,則 prop 當然是寫死的文字。這就是兩種 object 存取方式的差別。(section 7.3)

  • 所有自訂的 object 屬性都是 enumerable 的 (ie. 可使用 for/in loop 存取);Nonenumerable 屬性指的是繼承 Object class 來的那些屬性。所以 propertyIsEnumerable()(某自訂屬性是否 enumerable) 得到的結果幾乎會跟 hasOwnProperty() (是否有某個自訂屬性)一樣。(section 7.4)
  • (... 閱讀「[JavaScript] Chapter 6&7 Notes」全文)

    2009年9月23日 星期三

    [JavaScript] try/catch/finally

    Reference: JavaScript - The Definitive Guide, Section 6.17

    try/catch/finally 的執行示意圖:(四種情況)



    (... 閱讀「[JavaScript] try/catch/finally」全文)

    2009年9月17日 星期四

    [JavaScript] Variable Scope

    Reference: JavaScript - The Definitive Guide, Section 4.3

    function 內宣告的 var scope 是整個 function 的,舉例如下:
    var scope = "global";
    function f( ) {
      alert(scope);   // Displays "undefined", not "global"
      var scope = "local";  // Variable initialized here, but defined everywhere
      alert(scope);  // Displays "local"
    }
    f( );
    
    第一個 alert(scope);undefine 是因為下面那一行宣告的關係,
    就是說,這時候下面那行的 scope 已經宣告了,只是還沒初始。
    (... 閱讀「[JavaScript] Variable Scope」全文)