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 只要有一個是f 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
     
    }
     
=== 傳回是否相同 zBest Math Test You Bestmathtest Y A A Best Math Test T T Normal Best Math Test Szh 1 Best Math Test Learning JavaScripty n n Best Math Test h h Help Best Best Math Test xBest Math Test You Bestmathtest Y A A Best Math Test T T Normal Best Math Test Szh 1 Best Math Test Learning JavaScriptb Div Cos Irrational

Posted at 02:44上午 十一月 15, 2008 by shooeugenesea in JavaScript  |  迴響[0]

星期一 十一月 10, 2008

JavaScript - 基本的資料型態

Best Math Test You Bestmathtest Y A A Best Math Test T T Normal Best Math Test Szh 1 Best Math Test Learning JavaScript

Best Math Test

Best Math Test You Bestmathtest Y A A Best Math Test T T Normal Best Math Test Szh 1 Best Math Test Learning JavaScript

Best Math Test You Bestmathtest Y A A Best Math Test T T Normal Best Math Test Szh 1 Best Math Test

-1 Test s Best ssearcha-1 Math searchousearchcea-1c Szh You er Test h Best Math etsearchmT Test ssearch Math N Best rmsearchlsearchBsearchesearchr Szh he-1rsearchh Math Szh esearcht Best easearchc Test s-1e Test r-1h Normal ssearcharsearchh-1 You e Bestmathtest tsearchcM Best tsearch

JavaScript 大全 - CH3

focal points

  1. 數值 Number
    1. JavaScript 的型態有數值, 文字字串, boolean, Object (又分為以名稱為 key 的集合, 以編號為 key 的集合, 也就是陣列, 以及 function, function 可透過被呼叫執行操作.), Date, RegExp, Error...
    2. JavaScript 沒有整數與浮點數的分別, 所有的數值都是浮點數 (IEEE 754, 64 位元).
    3. 16 進位以 0x 開頭, 如 0xFF 為 255
    4. 浮點數支援指數標記, 就是加上 e 或 E. 如 1.01e5 就是 1.01 * ( 10 的 5 次方), 1.01-5 就是 1.01 * ( 10 的 -5 次方 )
    5. 無限大是 Infinity, 負無限大是 -Infinity, 可用 isFinite() 測試
    6. 不是一個數字是 NaN, 可用 isNaN 測試
    7. 特殊常數有 : Infinity, NaN, Number.MAX_VALUE, Number.MIN_VALUE, Number.POSITIVE_INFINITY, Number.NEGATIVE_INFINITY
  2. 字串 String
    1. JavaScript 用單引號或雙引號包起一段文字就是字串, 要表達字元只要長度為 1 的字串即可
    2. 字串跳脫用反斜線, 比方說可用 \' 來表示單引號的一點, \n 是換行, 還有其他的特殊字元比方說 \x 開頭可表示 Latin-1 的字元如 \xA9 是 ©
    3. 數字碰到字串時會自動轉成字串, 比方說 5 + 'test' = '5test'
    4. 數字要轉字串的方式還可透過 String(5) 或 Number(5).toString()
    5. Number.toString 可以指定基數, 預設為十進位, 也可用 Number(255).toString(16) 轉成 ff 或 Number(5).toString(2) 轉成 101
    6. Number.toFixed 可指定小數點後幾位, 比方說 Number(1.123456789).toFixed(5) 就會轉成 1.12346
    7. Number.toExponential 可轉成基數標記法, 比方說 Number(123456.789).toExponential(2) 轉成 1.23e+5
    8. Number.toPrecision 可指定有意義的數字位數, 如果數字超出指定的位數就會以基數標記法顯示. 比方說 Number(123456.789).toPrecision(7) 是 123456.8, Number(123456.789).toPrecision(5) 則是 1.2346e+5
    9. 除了 + 以外, 兩個數字內容的 -*/ 計算都可以被當成數字計算, 如 '5' + '5' = 55, '5' - '5' = 0, '5' * '5' = 25, '5' / '5' = 1.
    10. 也可透過 '5' - 0 或 Number('5') 把字串轉數字, 如 Number('5') + Number('5') = 10 或 ('5' - 0) + ('5' - 0) = 10
    11. 還可透過 parseInt, parseFloat 轉換成數字
      // 一般的 parseInt, parseFloat 
      alert( parseInt('5 anc') ); // 5, 就是數字之後的單位會被忽略
      alert( parseInt('0xFF') ); // 255 
      alert( parseFloat( '123.45 abcc' ) ); // 123.45 就是數字之後的單位會被忽略
      alert( parseFloat( '1.23e5' ) ); // 123000
      alert( parseFloat('12.23') ); // 12.23
      
      // parseInt 可指定基數 (parseFloat 就不行)
      alert( parseInt('101', 2) ); // 5
      alert( parseInt('ff', 16) ); // 255
      alert( parseInt('0123456', 10) ); // 123456
      
      // 數字之前有非數字字串就不能轉換成功
      alert( parseInt('$100') ); // NaN
      alert( parseFloat('$100') ); // NaN
       
  3. 布林值 Boolean
    1. 轉換的測試如下
       
       // Boolean to Number 
       alert( Number(true) ); // 1
       alert( Number(false) ); // 0
      
       // Boolean to String
       alert( String(true) ); // 'true'
       alert( String(false) ); // 'false
      
       // Object to Boolean
       alert( Boolean(new Object()) ); // true
       alert( Boolean(null) ); // false
       alert( Boolean(Number(0)) ); // false
       alert( Boolean(Number(NaN)) ); // false
       
  4. 函式 function
    1. JavaScript 的 function 不只可以執行, 而且還是資料型態, 所以可以存在變數和陣列或物件中, 還可以當成參數傳遞.
    2. function 宣告方式如下
      // 一般的宣告方式
      function cal(a) {}
      // function literal 或稱 lambda function
      var cal = function(a) {}
      // 用字串組成 function
      var cal = new Function( 'a', 'return a + a' );
       
  5. 物件 Object
    1. 使用關聯式陣列可以把物件屬性名稱當成陣列的 key 到物件中取值
      var objA = new Object();
      objA.x = 1;
      objA.y = 2;
      alert( objA.x ); // 1
      alert( objA['x'] ); // 1
      alert( objA['y'] ); // 2
       
    2. 可透過括號和逗號建立新物件, 而且物件的屬性名稱不一定要是識別字, 也可以是字串
      var A = {};
      alert( A.name ); // A
      
      var B = {},
       D : {}
       }
      };
      alert( B.name ); 
      alert( B.children.C.name ); // C
      
      var E = {} 
      };
      alert( E.F.name ); // FF
       
    3. 物件自動轉成 Boolean 時會變 true, 如果自動轉字串就會呼叫物件的 toString, 物件轉數字的時候會呼叫 valueOf
      var TestO = function() {}
       TestO.prototype.valueOf = function() {}
      }
      window.onload = function() {}
       
  6. 陣列 Array
    1. 物件的關聯式陣列用變數名稱當 key, 陣列則是用以 0 開始的 index.
    2. 建立陣列的方式
      var a1 = new Array();
      a1[0] = 'a';
      a1[1] = 1.2;
      a1[2] = true;
      a1[3] = {}
      a1[5] = 'a5'
      alert( a1[3].name ); // a3
      alert( a1[4] ); // undefined
      
      var a2 = new Array( 'a', 1.2, true, {} );
      alert( a2[3].name ); // a3
      
      var a3 = new Array(10); // 建立長度 10 的陣列
      var a4 = [ 'a', 1.2, true, {} ];
      alert( a4[3].name ); // a4
      
      var a5 = [ [1,2,3], ['a','b'], [] ];
      alert( a5[1][0] ); // a
       
  7. null
    1. 轉 boolean 會變 false, 轉數字是 0, 轉字串是 'null'
  8. undefined
    1. 轉 boolean 會變 false, 轉數字是 NaN, 轉字串是 'undefined'
    2. undefined 是一個未定義的值, 和 null 是不一樣的, 不過透過 == 比較卻會回傳 true, 要用 === 才會回傳 false
      alert( null == undefined ); // true
      alert( null === undefined ); // false
       
  9. Date
    1. 幾種使用 Date 的方式如下
      alert( new Date() ); // today
      alert( new Date(2008, 10, 17) ); // 2008/11/17
      
      var someD = new Date();
      someD.setFullYear( someD.getFullYear() + 1 );
      alert( someD ); // today add one year
      alert( someD.toLocaleDateString() ); // 顯示區域的時間, 如 2008年11月9日  
       
  10. Regular Expression
    1. Regular Expression 宣告透過 / 把 pattern 包起來, 如 /^abc*/
  11. Wrapper
    1. 字串, 布林值與數值分別有 String, Boolean, Number 三個 wrapper, 也各自定義了一些 method
      alert( 'abcdefghijklmnopqrstu'.substr(1, 5) );
      alert( true.toString() );
      alert( 123.45678.toFixed(2) );  
       
    2. String, Boolean, Number 都可以透過 new Object 來起始
      alert( new Object('te') + new Object('st') ); // test
      alert( !new Object(true) ); // false
      alert( new Object(1) + new Object(2) ); // 3
       
    3. 當使用 'abcde'.substr 的時候, 並不是說 'abcde' 是一個字串物件, 而是在基本型態 字串 被呼叫到字串物件的 method 時, JavaScript 自動建立一個暫時的字串物件來使用物件的 method, 不過一旦呼叫完以後這個物件就會被丟棄, 回歸到基本型態(字串). 也就是說, JavaScript 在這裡做了臨時物件的轉換. (原本 String 物件轉成字串使用也有同樣的效果)
    4. 雖然字串和 String 因為 JavaScript 會臨時轉換而沒什麼差別, 但有時還是不一樣, 例如使用 eval 的時候
      var TestObj = function() {}
      }
      window.onload = function() {}
       
  12. 轉回基本型態
    1. 如果屬性比方說 font-size 寫 2em 或 200% 表示相較於繼承來的屬性而言是多少比例, 使用這種相對關係的比例好處是只要控制 root 的效果, 整體的效果就能一起變動
    2. 指定 tag 的 style.
      body {}
      
      /* 一次指定兩個 tag 的效果 */
      h1, h2 {}
       
    3. 指定 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 比較晚宣告.
    4. 指定 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.
    5. 指定某個 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 {}
       
    6. 屬性速記
      /* 原本的屬性 */
      .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 */
       
    7. Pseudo class : 雖然不能自己定義, 但是如果使用到瀏覽器支援的虛擬類別就可以呈現效果.
      /* 連結原本的顏色為藍色 */ 
      a:link {}
      /* 拜訪過的連結是灰色 */
      a:visited {}
      /* 滑鼠在上方時呈現綠色 */
      a:hover {}  
      /* id 為 testid 的 tag 滑鼠滑過連結時呈現黃色 */
      #testid a:hover {}
       
    8. Cascade
      1. 瀏覽器會先把 CSS 中相關的設定依照 作者, 使用者, 瀏覽器預設 排列出來, 再依照元素的優先分數決定要使用哪個效果.
      2. 一種計算分數的方式 : 百位數代表 id, 有 id 加 1 分; 十位數代表 class 或 pseudo class, 有指定加 1 分; 個位數代表 tag name, 有指定加 1 分
        /* grade : 1 */  
        h1 {}
        /* grade : 11 */
        h2.myClass {}
        /* grade : 100 */
        #testid {}
         
    9. 浮動 float
      /* id 為 testid 的 div 元素會浮動到畫面右邊, 其下方的元素會自動往上補又不會蓋掉這個 div */ 
      div#testid {} 
       
    10. 使用 clear 避免因為 float 元素而擠壓到自己的內容
      /* 這樣 testid2 的右邊不會因為 testid 浮動到畫面右邊導致 testid2 的內容被擠壓到.
       * testid2 會被擠到 testid 下方 */ 
      div#testid2 {}
      
      div#testid {} 
       
    11. 現制整個畫面的寬度. 比方說要限制在寬度 800, 可以用一個 div 把所有的網頁內容放在這個 div 內, 然後取名 allContent, 再套用下面的 css.
      /* margin-left 和 margin-right 設定為 auto 可使這個 div 保持在畫面中間 */ 
      div#allContent {} 
       
    12. 絕對定位 : 透過 position 設定為 absolute(預設為 static), 可以明確指定這個 div 的寬高以及出現的位置在哪. 使用這種方式指定的話, position 為 static 的元素都不會理會這個元素的位置而直接被 position 為 absolute 的元素覆蓋掉
      /* 這樣會底色黃色出現在離頂端 200px 離左方 200px 的位置 */ 
      div#anywhere {} 
       
    13. z-index : 使用絕對定位之後就會有兩個元素重疊的現象, 這時候就要決定誰在上面誰在下面, 決定誰上誰下的地方在 z-index 這個屬性, 誰大誰就放上面.
      /* 這兩個 div 可看出 : 重疊的時候 anywhere1 會被 anywhere2 蓋過去 */ 
      div#anywhere1 {}
      
      div#anywhere2 {} 
       
    14. 使用 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 {}
       
    15. fixed : 固定在瀏覽器上的某個位置
      /* outer 會固定在離瀏覽器頂端 100px 與瀏覽器左邊離 -60px, 所以會被瀏覽器左邊擋掉一點 */
      div#outer {} 
       
    16. relative : 與其他元素的相對位置加上偏移. 這個屬性和 absolute 與 fixed 都不同, 使用 relative 讓元素像是一般的元素一樣會被畫面上各種元素擠來擠去, 最後再加上指定的偏移量.
      /* outer 會跑到被擠壓過後的位置往下移 50px 往右移 20px */
      div#outer {} 
       
    17. 改變 li 項目清單的外觀.
      li#a {}
      li#b {}
      li#c {}
      li#d {}
      li#e {}
      
      /* A.XXX 
       * B.XXX
       * C.XXX
       */
      li#f {}
       
    18. 改變 li 控制 li 內的文字出現在標識下或文字下
      /* A.XXX
       *  XXX
       * B.XXX
       */
       li {}
      /* A.XXX
       * XXX
       * B.XXX
       */
       li {}
       
    19. 把 table 的水平邊框和垂直邊框設定成不同大小
      table#testid {} 
       
    20. 使邊框重疊
      /* 方法 1. 指定 border-spacing */
      table#testid {}
      /* 方法 2. 指定 border-collapse */
      table#testid {}
       
    21. 使 table 裡面的 table 的 th 背景為白色
      table table th {}
       
    22. 列印的時候套用另一組 CSS.
      <!-- 手攜裝置的 CSS -->
      <link rel="stylesheet" type="text/css" media="handheld" href="http://best-math-test-you.bestmathtest.com/Group/Test/szh/1" /> 
      
      <!-- 列印的 CSS -->
      <link rel="stylesheet" type="text/css" media="print" href="http://best-math-test-you.bestmathtest.com/Best/Math/Test/Best/szh/1" /> 
       
      1. 列印最好用點數如 12pt 來指定文字大小
      2. display 屬性可用來控制列印時候的特殊情形, 比方說不印就設 display : none
    zBest Math Test You Bestmathtest Y A A Best Math Test T T Normal Best Math Test Szh 1 Best Math Test Learning JavaScripty n n Best Math Test h h Help Best Best Math Test xBest Math Test You Bestmathtest Y A A Best Math Test T T Normal Best Math Test Szh 1 Best Math Test Learning JavaScriptb Div Cos Irrational

星期日 十月 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

zBest Math Test You Bestmathtest Y A A Best Math Test T T Normal Best Math Test Szh 1 Best Math Test Learning JavaScripty n n Best Math Test h h Help Best Best Math Test xBest Math Test You Bestmathtest Y A A Best Math Test T T Normal Best Math Test Szh 1 Best Math Test Learning JavaScriptb Div Cos Irrational