標籤:
1.利用toString()裡面的參數,實現各進位之間的快速轉換:
var n = 17;binary_string = n.toString(2);//->二進位"10001"octal_tring = n.toString(8);//->八進位"021"hex_string = n.toString(16);//->十六進位"0x11"
2.parseInt()可以接受第二個選擇性參數,這個參數是指定數字轉換的基數,合法的取值範圍是2~36.(進位)
parseInt(‘11‘, 2); //->3 (1*2 + 1)parseInt(‘ff‘, 16); //->255 (15*16 + 15)parseInt(‘zz‘, 36); //->1295 (35*36 + 35)parseInt(‘077‘, 8); //->63 (7*8 + 7)parseInt(‘077‘, 10); //->77 (7*10 +7)
3.申明提前(先行編譯時進行的)
:即JavaScript函數裡聲明的所有變數(但不涉及賦值)都被‘提前’至函數體的頂部。 在函數體內的局部變數覆蓋了同名的全域變數。(JavaScript沒有塊級範圍)
4.當使用var聲明一個變數的時候,這個變數是不可配置的,也就是說這個變數無法通過delete運算子進行刪除操作。5.一元加法(+)和一元減法(-) 一元加法(+):一元加法操作符把運算元轉換為數字或者NaN,並返回這個轉換後的數字。如果運算元本身就是個數字,則直接返回這個數字。(可用來簡單的把‘數字字串’轉換為數字) 一元減法(-):當‘-’用作一元運算子的時候,它會根據需要把運算元轉換為數字,然後改變運算結果的符號。6.NaN和任何值都不想等,包括它本身。
通過X!===X來判斷X是否為NaN,只有在X為NaN的時候這個運算式的結果才為true.(用isNaN()來判斷一個變數是否為NaN)
7.Infinity (無限大)、-Infinity (無限小)8.JavaScript實現的幾種排序演算法。1>快速排序演算法:
/*快速排序法*/ function quickSort(a) { if (a.length <= 1) { return a; } var midLength = Math.floor(a.length / 2); var midValue = a.splice(midLength,1); var left = []; var right = []; for (var i = 0; i < a.length; i++) { if (a[i] < midValue) { left.push(a[i]); } else { right.push(a[i]); } } return quickSort(left).concat(midValue,quickSort(right)); } console.log(quickSort([1,5,3,6,2,4,0]));
2>冒泡排序演算法:
/*冒泡排序法*/ function bubbleSort(a) { var length = a.length; var sortArray; for (var i = 0; i < length-1; i++) { for (var j = 0; j < length-i-1 ; j++) { if (a[j] > a[j+1]) { sortArray = a[j]; a[j] = a[j+1]; a[j+1] = sortArray; } } } return a; } console.log(bubbleSort([2,1,3,6,5,4,7,0]));
3>插入排序演算法:
/*插入排序法*/ function insertSort(a) { var length = a.length; var sortArray; for (var i = 1; i < length; i++) { for (var j = 0; j < i ; j++) { if (a[i] < a[j]) { sortArray = a[i]; a[i] = a[j]; a[j] = sortArray; } } } return a; } console.log(insertSort([0,6,5,3,4,2,1,7]));
4>選擇排序演算法:
/*選擇排序法*/ function selectSort(a) { for (var i = 0; i < a.length; i++) { var min = a[i]; var k = i; for (var j = i + 1; j < a.length; j++) { if (min > a[j]) { min = a[j]; k = j; } } a[k] = a[i]; a[i] = min; } return a; } console.log(selectSort([5,1,4,0,3,2,7,6]));
9) 不要在迴圈內部使用try-catch-finally
try-catch-finally中catch部分在執行時會將異常賦給一個變數,這個變數會被構建成一個運行時範圍內的新的變數。
切忌:
var object = [‘foo‘, ‘bar‘], i; for (i = 0, len = object.length; i < len; i++) { try { // do something that throws an exception } catch (e) { // handle exception } }
而應該:
var object = [‘foo‘, ‘bar‘], i; try { for (i = 0, len = object.length; i <len; i++) { // do something that throws an exception } } catch (e) { // handle exception }
10) 使用XMLHttpRequests時注意設定逾時
XMLHttpRequests在執行時,當長時間沒有響應(如出現網路問題等)時,應該中止掉串連,可以通過setTimeout()來完成這個工作:
var xhr = new XMLHttpRequest (); xhr.onreadystatechange = function () { if (this.readyState == 4) { clearTimeout(timeout); // do something with response data } } var timeout = setTimeout( function () { xhr.abort(); // call error callback }, 60*1000 /* timeout after a minute */ ); xhr.open(‘GET‘, url, true); xhr.send();
同時需要注意的是,不要同時發起多個XMLHttpRequests請求。
11) 處理WebSocket的逾時
通常情況下,WebSocket串連建立後,如果30秒內沒有任何活動,伺服器端會對串連進行逾時處理,防火牆也可以對單位周期沒有活動的串連進行逾時處理。
為了防止這種情況的發生,可以每隔一定時間,往伺服器發送一條空的訊息。可以通過下面這兩個函數來實現這個需求,一個用於使串連保持活動狀態,另一個專門用於結束這個狀態。
var timerId = 0; function keepAlive() { var timeout = 15000; if (webSocket.readyState == webSocket.OPEN) { webSocket.send(‘‘); } timerId = setTimeout(keepAlive, timeout); } function cancelKeepAlive() { if (timerId) { cancelTimeout(timerId); } }
keepAlive()函數可以放在WebSocket串連的onOpen()方法的最後面,cancelKeepAlive()放在onClose()方法的最末尾。
12) 注意原始操作符比函數調用快
比如,一般不要這樣:
var min = Math.min(a,b); A.push(min);
可以這樣來代替:
var min = a < b ? a : b; A[A.length] = min;
JavaScript小筆記の經典演算法等....