細數JavaScript中那些神乎其神的技巧

darkjune 7年前發布 | 10K 次閱讀 JavaScript開發 JavaScript

閑來無事,整理一下JavaScript中那些神乎其神的技巧,假裝大牛的樣子

1. 字符串轉換為數字

var a = "123";
    console.log(+a);         // 123
    console.log(typeof +a);  // number

    // 同樣可用于日期轉換為數值:
    var b = +new Date();     // 1468545682168

2. 數值向下取整

var a = ~~3.14;   // 3
    var b = 3.14>>0;  // 3
    var c = 3.14|0;   // 3

3. 字符串轉換為數值并取整<!-- more -->

var a = "3.14"|0;  // 3
    var b = "3.14"^0;  // 3

4. 函數設置默認值

function func(arg){
        var arg = arg || "default"; 
        // arg 為 undefined, null, "", 0, false, NaN 時最后都得到"default"
    }

5. 變量值交換

var a = 1,
        b = 2;
    a = [b, b = a][0];
    console.log(a);  // 2
    console.log(b);  // 1

6. 使用 for in 遍歷對象取到屬性名與屬性

var obj = {
        a: 1,
        b: 2
    }
    for(var i in obj) {
        console.log("obj." + i + " = " + obj[i]);
    }
    // output: obj.a = 1
    //         obj.b = 2

7. 截斷數組

var arr = [1, 2, 3, 4, 5, 6];
    arr.length = 3;
    console.log(arr);  // [1, 2, 3]

8. 提高遍歷較大Enumerable數據的性能

var arr = [1, 2, 3, 4, 5, 6, ...];
    var len = arr.length;  // 緩存arr.length
    for(var i = 0; i < len; i++) {
        console.log(arr[i]);
    }

    // 或者(推薦使用)
    for(var i = 0, a; a = arr[i++];) {
        console.log(a);
    }

9. 使用 && 替代單一條件判斷

// 你可能這樣寫過
    if(!token) {
        login();
    }
    // 其實這樣也可以
    !token && login();

10. 檢測 對象/數組 中是否有指定 屬性/元素

var CURD = {
        add: function() {},
        delete: function() {},
        edit: function() {}
    }
    console.log("add" in CURD);   // true
    console.log("find" in CURD);  // false

    var arr = [1, 2, 3];
    console.log(1 in arr);  // true
    console.log(6 in arr);  // false

11. 通過閉包調用setTimeout

for(var i = 0; i < 10; i++) {
        setTimeout(function(){
            console.log(i);  // 10 10 10 ...
        },500);
    }

    for(var i = 0; i < 10; i++) {
        (function(i){
            setTimeout(function(){
                console.log(i);  // 0 1 2 3 ...
            },500)
        })(i);
    }

 

 

來自:https://segmentfault.com/a/1190000008017702

 

 本文由用戶 darkjune 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!