JavaScript程序员应该知道的45个实用技巧(4)

var sum = 0;
for (var i = 0, len = arrayNumbers.length; i < len; i++) {
    sum += arrayNumbers[i];
}


附加的好处是,i 和 len 两个变量的取值都只执行了一次,会比下面的方式更高效:

复制代码 代码如下:

for (var i = 0; i < arrayNumbers.length; i++)


为什么?因为arrayNumbers.length每次循环的时候都会被计算。
35 – 在调用 setTimeout() 和 setInterval() 的时候传入函数,而不是字符串。
如果你将字符串传递给 setTimeout() 或者 setInterval(),这个字符串将被如使用 eval 一样被解析,这个是非常耗时的。
不要使用:

复制代码 代码如下:


setInterval('doSomethingPeriodically()', 1000);
setTimeOut('doSomethingAfterFiveSeconds()', 5000)


而用:

复制代码 代码如下:


setInterval(doSomethingPeriodically, 1000);
setTimeOut(doSomethingAfterFiveSeconds, 5000);


36 – 使用 switch/case 语句,而不是一长串的 if/else
在判断情况大于2种的时候,使用 switch/case 更高效,而且更优雅(更易于组织代码)。但在判断的情况超过10种的时候不要使用 switch/case。
37 – 在判断数值范围时使用 switch/case
在下面的这种情况,使用 switch/case 判断数值范围的时候是合理的:

复制代码 代码如下:


function getCategory(age) {
    var category = "";
    switch (true) {
        case isNaN(age):
            category = "not an age";
            break;
        case (age >= 50):
            category = "Old";
            break;
        case (age <= 20):
            category = "Baby";
            break;
        default:
            category = "Young";
            break;
    };
    return category;
}
getCategory(5);  // will return "Baby"
//一般对于数值范围的判断,用 if/else 会比较合适。 switch/case 更适合对确定数值的判断


38 – 为创建的对象指定prototype对象
写一个函数来创建一个以指定参数作为prototype的对象是有可能:

复制代码 代码如下:

function clone(object) {
    function OneShotConstructor(){};
    OneShotConstructor.prototype= object;
    return new OneShotConstructor();
}
clone(Array).prototype ;  // []


39 – 一个HTML转义函数

复制代码 代码如下:

function escapeHTML(text) {
    var replacements= {"<": "<", ">": ">","&": "&", "\"": """};
    return text.replace(/[<>&"]/g, function(character) {
        return replacements[character];
    });
}


40 – 避免在循环内部使用 try-catch-finally
在运行时,每次当 catch 从句被执行的时候,被捕获的异常对象会赋值给一个变量,而在 try-catch-finally 结构中,每次都会新建这个变量。

避免这样的写法:

复制代码 代码如下:

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
}


41 – 为 XMLHttpRequests 设置超时。
在一个XHR请求占用很长时间后(比如由于网络问题),你可能需要中止这次请求,那么你可以对XHR调用配套使用 setTimeout()。

复制代码 代码如下:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wjxzyy.html