调用foo.length()5次更高效或将其设置为变量然后调用它更有效

时间:2011-08-13 18:11:33

标签: javascript jquery

我是javascript的新手,我的情况就像我检查的那样

if(foo.length>0){
 // do something...
}

我在8个地方做到了。我想知道它是否等于我将foo.length()条件设置为变量然后在if语句中使用该变量。哪一个是有效的,我该怎么做..?

有没有办法在javascript中执行这种任务,这在java中更有效率我们有apache commons stringUtils,这是有效的,易于使用。

5 个答案:

答案 0 :(得分:2)

我将它存储在一个变量中只是为了更好的可读性和更小的占用空间。现在作为奖励你会在不知不觉中获得更好的表现 - 当你向他们抛出这些论点时,没有人会指责你进行不必要的微优化:)(是的,我可能需要帮助)。

答案 1 :(得分:2)

性能提升可以忽略不计。字符串对象已经有关于字符串长度的信息,因此使用length属性不会像循环字符串中的所有字符一样找到它的结尾。

将字符串的长度放在变量中实际上存在缺陷。您得到两个松散耦合的变量,并且更改字符串要求您还更新长度变量以使代码正常工作。如果你错过了更新某个地方的长度变量,你将会有不一致的值。

此外,保持长度变量更新可能会降低性能而不是增加性能。每次字符串更改时都必须更新长度变量,即使您没有使用它们之间的长度。如果您没有变量,最终可能会更频繁地阅读length属性。

编辑:

实际性能测试显示浏览器的性能不同,但使用length属性通常比使用变量更快:

http://jsperf.com/length-in-a-variable

答案 2 :(得分:1)

您可以在变量中保存数组的长度,并且在某些情况下性能会更好。特别是如果foo不是一个真正的数组,而是一个DOM元素列表,就像你在调用document.getElementsByTagname()时得到它一样。

答案 3 :(得分:1)

如果您需要在8个不同位置使用foo.length的值,那么请将其放在变量中。但是你这样做是为了防止冗余,而不是效率。

顺便说一句,在检索时不计算数组和类数组对象的length属性。它始终填充Number值。 JavaScript引擎会自动更新其值。 (例如,当您向数组添加新的数组元素时。)因此,foo.length是一个普通的属性检索 - 没有方法或算法在数组对象内部执行。

答案 4 :(得分:0)

也许某个功能会有所帮助?

// returns true if the specified len is greater than the obj.length
// returns false of the object doesn't have a length property or if 
// the len is <= the obj.length
function checkLen(obj, len) {
    try {
        if(obj.length > len) return true;
    } catch(e) {
        console.log(e);
    }
    return false;
}