JavaScript小筆記の經典演算法等....

來源:互聯網
上載者:User

標籤:

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小筆記の經典演算法等....

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.