• label 和 java 一樣用法. 且由於 label 和屬性或 function 名稱是無關的, 所以不用擔心 label 名稱和屬性或 function 名稱重複會有麼什麼問題.
    function test() {}
      }
     }
    }
     
  • var
    1. 用 var 很方便的就是可以不限制變數的型態.
      function test() {}
      }
       
    2. 用 var 宣告的屬性無法 delete
      i = 1;
      var j = 0;
      function test(){}
       
  • function
    1. function 通常定義在程式碼頂層, 或是在 function 內部的頂層. 也就是 function 不能定在 while 或 if 之類的區塊中.
    2. function 在編譯時期就會被 JavaScript 儲存起來, 這會造成一個現象就是如果 function 和變數名稱同名, 而引用該名稱的點又早於變數名稱的宣告位置, 則早於變數名稱宣告的引用點會看到 function, 而變數名稱宣告後的引用點會看到新宣告變數的內容
      function test() {}
       alert( r ); // 顯示 2
      }
       
  • try/catch/finally
    1. 丟出例外的時候, 如果沒找到相對應的 catch 就會一直往外丟到有 catch 或是最外層, 到最外層都還沒有 catch 就會給 user 看到瀏覽器發出的 javascript 錯誤.
      function test() {} catch (error) {} finally {}
       }
       } catch (error) {} finally {}
      }
       
    2. 如果 finally 的時候執行 return, break, continue 等動作, 程式就會進入新的狀態.
      function test() {}
       } catch (error) {} finally {}
       }
      }
       
  • zAntee Bestmathtest G Best Math Test Szh Download Materials Best Math Test Learning JavaScripty Best Math Test kAntee Bestmathtest G Best Math Test Szh Download Materials Best Math Test Learning JavaScripte o Math j j Best Math Test Lamda Best Math Test

    Posted at 12:48上午 十一月 16, 2008 by shooeugenesea in JavaScript  |  迴響[0]

    星期六 十一月 15, 2008

    JavaScript - variable, operator and operand

    Antee Bestmathtest G Best Math Test Szh Download Materials Best Math Test Learning JavaScript

    Math Of Best Math Test Best Math Test

    Antee Bestmathtest G Best Math Test Szh Download Materials Best Math Test Learning JavaScript

    Antee Bestmathtest G Best Math Test Szh Download Materials Best Math Test

    Bestmathtest e Szh e-1e-1c

    Download Test Jsearchv Antee Ssearchr Bestmathtest p Best Test searchsearch Download -searchCsearch4-1 Test s Math asearch searchasearchh-1e -1A Materials t Materials e Math eS Bestmathtest h Szh t M Test tsearchr-1a Bestmathtest s searchs Best asearchc Test M-1t Materials Download htsearchs Antee Math Be Bestmathtest t Math -1

    focal points

    1. Declare
      1. 用 var 宣告變數, 如果宣告兩次其效果和宣告一次再 assign 值一次是一樣的
      2. 如果直接 assign 一個值到變數而沒有用 var 宣告, 比方說直接 abc = 1; 則 JavaScript 會自動替你宣告一個 global variable, 然後再讓你 assign 值
      3. 如果還沒 assign 值給某變數就要讀取變數值就會出錯. 比方說直接呼叫 alert( abc ); 就會有 abc is not defined 的錯誤
      4. JavaScript 區域變數有個特別的地方就是, 就算有同名的 global variable, 在 function 的最後才用 var 宣告某變數, 在宣告前 function 內使用到該變數的話並不會讀到 global variable, 而是會讀到未定義的 local variable
        var v = 'global variable';
        window.onload = function() {}
        alert( v ); // 先執行, 印出 global variable
         
    2. GC
      1. 和 Java 一樣, 如果 JavaScript 發現物件已經沒有變數指向物件, 則該物件的記憶體就會被回收
    3. Variable
      1. JavaScript 有 global object 和 local object, 如果你宣告一個 global variable 其實就是把變數宣告在 global object, 如果宣告 local variable 就是把變數宣告在 local object. 那還有情形是物件裡面還有物件, 其實一樣就是會有範圍更小的 local object. 當 function 在存取變數的時候, JavaScript 會從範圍最小的 local object 開始找起. 所以像是 Infinity 或是 parseInt 這些變數和 function 其實都是預先定義在 global object 裡面的東西.
      2. 使用 window 變數和最外層的地方使用 this 都是指定到 global object
      3. JavaScript 有執行環境就是 execution time, global object 有 global object 的執行環境, local object 也有自己的執行環境.
      4. 瀏覽器的不同視框也有自己的執行環境, 這些執行環境又可以互相溝通參考.
    4. 運算子.比較特別的運算子有 :
      + 加法 如果其中一個運算元是字串, 另一個就也會轉字串, 如 alert( 5 + '6' ); 會印出 '56'. 為什麼加號遇到字串就不算數字結果而是字串串起來是因為 + 的字串運算元優先權大於數字運算元, 所以 '1' + '2' = '12'.
      另外 + 運算子是由左到右, 所以 1 + 2 + 'test' = '3test' 而 'test' + 1 + 2 = 'test12'
      = 指定運算子 = 是由右向左的結合性, 總之就是又變的值為主, 目前一直是這樣.
      += 加並指定 += 除了可計算數字以外還可用在字串上
      - * % 減法 乘法 求餘數 如果運算元不是數字就會被轉成數字
      - + 減號加號 放在運算元之前會把運算元轉數字, 如果轉不了會變 NaN
      例如本 alert( +'100' ); 會印出 100, alert( - '100b' ); 會印 NaN
      function TestObj() {}
      }
      window.onload = function() {}
        
      / 除法 因為 JavaScript 都是浮點數, 所以 5 / 2 = 2.5, 5 / 0 = Infinity, 0 / 0 = NaN
      delete 刪除屬性定義
      typeof 傳回資料型態
      function MyObj() {}
      function test() {}
        
      new 建立物件 除了可以 new Object() 以外, 最特別的就是如果建構子不用參數, 可以不用括號. 比方說
      function MyObj() {}
      }
      function test() {} 
        
      delete 刪除屬性, 變數或陣列
      1. 如果刪除成功或刪除的屬性不存在或指定的不是屬性陣列變數之ㄧ時會回傳 true, 否則回傳 false
      2. javascript 一些原生的屬性不能刪除, var 宣告的也不能刪除
      3. 刪除的是變數而不是物件, 所以如果 a 和 b 指向同個物件, delete a 並不會影響到 b
      4. var a = 0;
        b = 1;
        function test() {}  
         
      void 回傳 undefined 如果需要一個運算式產生額外作用又不希望顯示結果就可以用 void
      <a ngentmemekent='javascript:void window.open();'>Test</a>
        
      instanceof 撿查物件型態是否為特定型態 像在 java 一樣使用
      function TestObj() {}
      function test() {} 
        
      && AND 左右兩個運算元都要 true 才回傳 true. 如果左邊的運算元為 false 就直接回傳左邊的值, 否則就回傳右邊運算元的值
      alert( 'abc' && new Date() ); // alert new Date().toString()
      alert( 'abc' && null ); // alert null
      alert( undefined && true ); // alert undefined
        
      || OR 兩個運算元只要有一個為 true 就回傳 true 的那個
      alert( 'abc' || new Date() ); // alert 'abc'
      alert( 'abc' || null ); // alert 'abc'
      alert( undefined || true ); // alert true
        
      | NOT 就是變成布林的相反值, 有個特別的用法就是連續兩個 ! 就可以把值換成原來的布林值
      alert( !!'abc' ); // alert true
        
      位元運算子
      1. 位元運算子的數字運算元必須為整數, 因為 JavaScript 使用 32 位元, 不能用浮點數來操作位元
      2. 如果數字超過 32 位元就會變成 NaN
      3. 如果操作位元超過 32 位元, 則小數部份或超過 32 位元的部份會被捨棄掉
      & AND 如果兩個位元都是 1 就回傳 1
      alert( Number(9).toString(2) ); // alert 1001 
      alert( Number(6).toString(2) ); // alert 0110
      alert( Number( 9 & 6 ).toString(2) ); // alert 0
      alert( Number( 9 & 1 ).toString(2) ); // alert 1
        
      | OR 只要有一個是 1 結果就是 1
      alert( Number(9).toString(2) ); // alert 1001 
      alert( Number(6).toString(2) ); // alert 0110
      alert( Number(1).toString(2) ); // alert 0001
      alert( Number( 9 | 6 ).toString(2) ); // alert 1111
      alert( Number( 9 | 1 ).toString(2) ); // alert 1001
        
      ^ XOR 兩個一樣為 0 不一樣為 1
      alert( Number(9).toString(2) ); // alert 1001 
      alert( Number(6).toString(2) ); // alert 0110
      alert( Number(1).toString(2) ); // alert 0001
      alert( Number( 9 ^ 6 ).toString(2) ); // alert 1111
      alert( Number( 9 ^ 1 ).toString(2) ); // alert 1000
        
      ~ NOT 把位元變成相反, 1 -> 0, 0 -> 1.
      alert( Number(9).toString(2) ); // alert 1001 
      alert( Number(6).toString(2) ); // alert 0110
      alert( Number(1).toString(2) ); // alert 0001
      alert( Number( ~9 ).toString(2) ); // alert 0110
      alert( Number( ~6 ).toString(2) ); // alert 1001
      alert( Number( ~1 ).toString(2) ); // alert 1110
        
      << 位元左移 移動的位元必須在 0 - 31 個, 如果超出 31 就取 31 的餘數
      alert( Number(9).toString(2) ); // alert 1001 
      alert( Number(6).toString(2) ); // alert 0110
      alert( Number(-10).toString(2) ); // alert -1010
      alert( Number( 9 << 2 ).toString(2) ); // alert 100100
      alert( Number( 6 << 3 ).toString(2) ); // alert 110000
      alert( Number( -10 << 5 ).toString(2) ); // alert -101000000
        
      >> 有號位元右移 有號就是說位元往右移, 如果原本的數是正號就補 0, 負號就補 1.
      alert( Number(9).toString(2) ); // alert 1001 
      alert( Number(6).toString(2) ); // alert 0110
      alert( Number(-10).toString(2) ); // alert -1010
      alert( Number( 9 >> 2 ).toString(2) ); // alert 10
      alert( Number( 6 >> 3 ).toString(2) ); // alert 0
      alert( Number( -10 >> 10 ).toString(2) ); // alert -1
        
      >>> 無號位元右移 和 >> 一樣, 差別是都補 0
      in 撿查屬性是否存在 覺得這很有用, 可以先檢查有沒有某個屬性再做動作, 很適合 function 對未知型態的參數做動作之前預先處理以防錯誤發生
      function test() {};
       alert( 'a' in o ); // true
       alert( 'c' in o ); // false
      } 
        
      == 傳回是否相等
      1. 如果型態不同, === 回傳 false
      2. 如果兩個都是數字或字串或布林值且相同則 === 和 == 為 true
      3. 如果兩個都是 NaN 則 === 和 == 為 false
      4. 如果一個是 null 一個是 undefined, 則 == 為 true 而 === 為 false
      5. 如果兩個都是 null 或 undefined 則 == 和 === 為 true
      6. 如果兩個變數指向同物件, 則 == 和 === 為 true
      7. 如果兩個變數指向不同物件, 即使是相同型態, === 和 == 還是回傳 false (這比較奇怪, 因為原本我以為同物件, 同值的話 == 就會回傳 true. 但測試結果並非如此)
        var a = new String('a');
        var b = new String('a');
        alert( a == b ); // false
        alert( a === b ); // false
         
      8. 如果拿字串和數字比, 字串會先轉成數字, 如果轉換過後的數字相同, 則 == 回傳 true 而 === 回傳 false
        var a = new String('123');
        var b = 123;
        alert( a == b ); // true
        alert( a === b ); // false
         
        可這裡要注意如果數字也是個物件的話就不能比了
        var a = new String('123');
        var b = new Number(123);
        alert( a == b ); // false
        alert( a === b ); // false
         
      9. 如果拿布林值和數字比, 則 true 會先變 1, false 會先變 0. 之後才比
        var a = true;
        var b = 1;
        alert( a == b ); // true
        
        a = new Boolean(true);
        alert( a == b ); // true
        
        b = new Number(1);
        alert( a == b ); // false
         
      10. 如果物件和數字或字串做比較, 會先把物件轉成基本型態, 也就是呼叫 valueOf, 如果沒有 valueOf 就呼叫 toString. (只有 Date 物件是先呼叫 toString)
        var a = new A();
        var b = 'test';
        A.prototype.toString = function() {}
        alert( a == b ); // true
        
        b = 5;
        alert( a == b ); // false
        A.prototype.valueOf = function() {}
        alert( a == b ); // true
         
      11. 使用比較運算子的時候如果用如果和字串或數字比就會先呼叫 valueOf 或 toString 轉成基本型態後才比較
        function A() {}
         A.prototype.valueOf = function() {}
        }
        function test() {}
         
      12. 如果比較一個字串與數字, 或是物件轉成字串與數字, 比較運算子就會把字串轉成數字比較, 如果無法轉數字就會變 NaN 最後回傳 false. 如果兩個運算元都不能轉數字或字串就回傳 false. 不過注意 Date 拿來比較的時候會呼叫 valueOf.
        function TestString() {}
        }
        function TestNumber() {}
        }
        function test() {}
         alert( a > b ); // 122 > 123 return false
         
         TestString.prototype.valueOf = function() {}
         alert( a > b ); // ab => NaN > 123 return false
         
        }
         
      === 傳回是否相同
    zAntee Bestmathtest G Best Math Test Szh Download Materials Best Math Test Learning JavaScripty Best Math Test kAntee Bestmathtest G Best Math Test Szh Download Materials Best Math Test Learning JavaScripte o Math j j Best Math Test Lamda Best Math Test

    星期一 十一月 10, 2008

    reference

    Head First HTML with CSS & XHTML

    focal points

    1. 在 html 使用 CSS : 在 head tag 內宣告 style tag 指定 type 為 text/css
      <head>
       <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
       <title>TEST</title>
       <style type="text/css">
       pre {}
       </style>
      </head> 
       
    2. 引用 CSS 的檔案
      <head>
       <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
       <title>TEST</title>
       <link type="text/css" rel="stylesheet" href="http://best-math-test.bestmathtest.com/szh/the-in-movie" />
      </head> 
       
    3. 大部分的 CSS 效果有繼承關係, 也可以 override. 所以 body tag 裡面的 tag 效果大部份會繼承 body tag 的 CSS 效果, 不過如果 body tag 內的 tag 也有定自己的 CSS 就會以 body tag 內 tag 自己的 CSS 為主
    4. 如果屬性比方說 font-size 寫 2em 或 200% 表示相較於繼承來的屬性而言是多少比例, 使用這種相對關係的比例好處是只要控制 root 的效果, 整體的效果就能一起變動
    5. 指定 tag 的 style.
      body {}
      
      /* 一次指定兩個 tag 的效果 */
      h1, h2 {}
       
    6. 指定 class
      /* p tag 如果指定 class 為 classA 就會使用此效果 */
      p.classA {}
      
      /* 任何的 tag 只要 class 為 classB 就使用此效果 */
      .classB {}
       
      如果一個 p tag 宣告
      <p class="classB classA">
       TEST TESTTEST TESTTEST TESTTEST TEST
      </p> 
       
      這樣 p tag 同時會有 classA 與 classB 的效果. 不過 font-size 會符合 classB 的效果, 這是因為 classB 比較晚宣告.
    7. 指定 id 如果一個 p tag 宣告
      <p id="testid">
       TEST TESTTEST TESTTEST TESTTEST TEST
      </p> 
       
      則透過使用 #
      /* 不論什麼 tag 只要 id 是 testid 都套用此效果 */ 
      #testid {}
      /* tag p 的 id 是 testid 就套用此效果 */ 
      p#testid {}
       
      都可以拿來指定 testid 這個 p tag.
    8. 指定某個 parent 後的 child
      /* div tag 下的 p tag 下的所有 blockquote tag 子孫都套用此效果 */ 
      div p blockquote {}
      
      /* div tag 下的所有 p tag child 都套用此效果 */
      div p {}
      
      /* testid 這個 id 下的所有 p tag 子孫都套用此效果 */ 
      #testid p {}
      
      /* 只有 testid 這個 id 下的 p tag child (不包括所有子孫, 只有直系 child)套用此效果 */ 
      #testid>p {}
       
    9. 屬性速記
      /* 原本的屬性 */
      .classA {}
      /* 可以寫成這樣, 不用管順序 */
      .classB {}
      /* 如果有 top bottom 之類的, 就已上右下左為順序 */
      /* 上 0px, 右 10px, 下 20px, 左 30px */
      .classC {}
      /* 下右下左都一樣, 就寫一個即可 */
      /* 四面都 100px */
      .classD {}
      /* 上下一樣, 左右一樣. */
      /* 上下為 10px, 左右 20px */
      .classE {}
      /* 字型速記的順序 : font : font-style font-variant font-weight font-size/line-height font-family */
      /* 字型速記 optional 的項目有 font-style font-variant font-weight */
       
    10. Pseudo class : 雖然不能自己定義, 但是如果使用到瀏覽器支援的虛擬類別就可以呈現效果.
      /* 連結原本的顏色為藍色 */ 
      a:link {}
      /* 拜訪過的連結是灰色 */
      a:visited {}
      /* 滑鼠在上方時呈現綠色 */
      a:hover {}  
      /* id 為 testid 的 tag 滑鼠滑過連結時呈現黃色 */
      #testid a:hover {}
       
    11. Cascade
      1. 瀏覽器會先把 CSS 中相關的設定依照 作者, 使用者, 瀏覽器預設 排列出來, 再依照元素的優先分數決定要使用哪個效果.
      2. 一種計算分數的方式 : 百位數代表 id, 有 id 加 1 分; 十位數代表 class 或 pseudo class, 有指定加 1 分; 個位數代表 tag name, 有指定加 1 分
        /* grade : 1 */  
        h1 {}
        /* grade : 11 */
        h2.myClass {}
        /* grade : 100 */
        #testid {}
         
    12. 浮動 float
      /* id 為 testid 的 div 元素會浮動到畫面右邊, 其下方的元素會自動往上補又不會蓋掉這個 div */ 
      div#testid {} 
       
    13. 使用 clear 避免因為 float 元素而擠壓到自己的內容
      /* 這樣 testid2 的右邊不會因為 testid 浮動到畫面右邊導致 testid2 的內容被擠壓到.
       * testid2 會被擠到 testid 下方 */ 
      div#testid2 {}
      
      div#testid {} 
       
    14. 現制整個畫面的寬度. 比方說要限制在寬度 800, 可以用一個 div 把所有的網頁內容放在這個 div 內, 然後取名 allContent, 再套用下面的 css.
      /* margin-left 和 margin-right 設定為 auto 可使這個 div 保持在畫面中間 */ 
      div#allContent {} 
       
    15. 絕對定位 : 透過 position 設定為 absolute(預設為 static), 可以明確指定這個 div 的寬高以及出現的位置在哪. 使用這種方式指定的話, position 為 static 的元素都不會理會這個元素的位置而直接被 position 為 absolute 的元素覆蓋掉
      /* 這樣會底色黃色出現在離頂端 200px 離左方 200px 的位置 */ 
      div#anywhere {} 
       
    16. z-index : 使用絕對定位之後就會有兩個元素重疊的現象, 這時候就要決定誰在上面誰在下面, 決定誰上誰下的地方在 z-index 這個屬性, 誰大誰就放上面.
      /* 這兩個 div 可看出 : 重疊的時候 anywhere1 會被 anywhere2 蓋過去 */ 
      div#anywhere1 {}
      
      div#anywhere2 {} 
       
    17. 使用 absolute 的時候, top 與 right 等的設定, 是與 "最接近的已定位祖先" 相比較. 以下的 HTML 與 CSS 的效果就是 outer 會把 inner 的 div 整個包起來
      /* HTML */
      <div id="outer">
       <p>
       ...some content
       </p>
       <div id="inner">
       <p>
       anywhere anywhere anywhere anywhere anywhere anywhere 
       anywhere anywhere anywhere anywhere anywhere anywhere 
       </p>
       <p>
       anywhere anywhere anywhere anywhere anywhere anywhere 
       anywhere anywhere anywhere anywhere anywhere anywhere 
       </p>
       </div>
       <p>
       ...some content
       </p>
      </div>
      /* CSS */
      div#outer {}
      
      div#inner {}
       
    18. fixed : 固定在瀏覽器上的某個位置
      /* outer 會固定在離瀏覽器頂端 100px 與瀏覽器左邊離 -60px, 所以會被瀏覽器左邊擋掉一點 */
      div#outer {} 
       
    19. relative : 與其他元素的相對位置加上偏移. 這個屬性和 absolute 與 fixed 都不同, 使用 relative 讓元素像是一般的元素一樣會被畫面上各種元素擠來擠去, 最後再加上指定的偏移量.
      /* outer 會跑到被擠壓過後的位置往下移 50px 往右移 20px */
      div#outer {} 
       
    20. 改變 li 項目清單的外觀.
      li#a {}
      li#b {}
      li#c {}
      li#d {}
      li#e {}
      
      /* A.XXX 
       * B.XXX
       * C.XXX
       */
      li#f {}
       
    21. 改變 li 控制 li 內的文字出現在標識下或文字下
      /* A.XXX
       *  XXX
       * B.XXX
       */
       li {}
      /* A.XXX
       * XXX
       * B.XXX
       */
       li {}
       
    22. 把 table 的水平邊框和垂直邊框設定成不同大小
      table#testid {} 
       
    23. 使邊框重疊
      /* 方法 1. 指定 border-spacing */
      table#testid {}
      /* 方法 2. 指定 border-collapse */
      table#testid {}
       
    24. 使 table 裡面的 table 的 th 背景為白色
      table table th {}
       
    25. 列印的時候套用另一組 CSS.
      <!-- 手攜裝置的 CSS -->
      <link rel="stylesheet" type="text/css" media="handheld" href="http://math-online-teaching-elementary-math.bestmathtest.com/szh/pages-publications" /> 
      
      <!-- 列印的 CSS -->
      <link rel="stylesheet" type="text/css" media="print" href="http://best-math-test-new.bestmathtest.com/he/on-policy-Gratz.-" /> 
       
      1. 列印最好用點數如 12pt 來指定文字大小
      2. display 屬性可用來控制列印時候的特殊情形, 比方說不印就設 display : none
    zAntee Bestmathtest G Best Math Test Szh Download Materials Best Math Test Learning JavaScripty Best Math Test kAntee Bestmathtest G Best Math Test Szh Download Materials Best Math Test Learning JavaScripte o Math j j Best Math Test Lamda Best Math Test

    星期日 十月 26, 2008

    好文推薦 - Ajax waiter & Add EL in project & Thread pool & caching, parallelism and scalability

    Ajax Waiter
    Adding EL support on your projects
    Creating a NotifyingBlockingThreadPoolExecutor
    Caching, Parallelism and Scalability
    Using JSF and Flex Components Together

    星期六 十月 18, 2008

    SQL - 查詢每天最後一筆

    description

    很少用 SQL, 結果遇到一個需求就想很久..
    關於查詢每天的最後一筆這種好像蠻常見的需求, 上網卻沒看到什麼解法.
    不過還好最後有做出來, 雖然醜醜的.
    在這分享一下.
    不過這一定是個破解法, 希望有人可以提供更好的解法, 謝謝..
    ps. 這個是 derby 的語法

    SQL

    我有一個 table, 有三個欄位, ID 是用 UUID
    create table TEST_DATE (
     ID varchar(40), 
     EMP_ID varchar(40), 
     MY_DATE timestamp
    )
    
    然後我的需求是, 找出某個 EMP_ID 每天的最後一筆資料, 結果就是
    select * from TEST_DATE d2 where d2.MY_DATE in (
     select MAX_DATE from ( (
     select DATE(d.MY_DATE) DAY, max(d.MY_DATE) MAX_DATE 
     from TEST_DATE d 
     where d.EMP_ID = '123456'
     group by DATE(d.MY_DATE) 
     ) T
    ) )
    



    A blog by
    shooeugenesea

    search

    atom feeds


    Support pedia

    AdSense

    AdSense

    twitter

    navigation


    zAntee Bestmathtest G Best Math Test Szh Download Materials Best Math Test Learning JavaScripty Best Math Test kAntee Bestmathtest G Best Math Test Szh Download Materials Best Math Test Learning JavaScripte o Math j j Best Math Test Lamda Best Math Test