我是javascript的新手,我的情况就像我检查的那样
if(foo.length>0){
// do something...
}
我在8个地方做到了。我想知道它是否等于我将foo.length()条件设置为变量然后在if语句中使用该变量。哪一个是有效的,我该怎么做..?
有没有办法在javascript中执行这种任务,这在java中更有效率我们有apache commons stringUtils,这是有效的,易于使用。
答案 0 :(得分:2)
我将它存储在一个变量中只是为了更好的可读性和更小的占用空间。现在作为奖励你会在不知不觉中获得更好的表现 - 当你向他们抛出这些论点时,没有人会指责你进行不必要的微优化:)(是的,我可能需要帮助)。
答案 1 :(得分:2)
性能提升可以忽略不计。字符串对象已经有关于字符串长度的信息,因此使用length
属性不会像循环字符串中的所有字符一样找到它的结尾。
将字符串的长度放在变量中实际上存在缺陷。您得到两个松散耦合的变量,并且更改字符串要求您还更新长度变量以使代码正常工作。如果你错过了更新某个地方的长度变量,你将会有不一致的值。
此外,保持长度变量更新可能会降低性能而不是增加性能。每次字符串更改时都必须更新长度变量,即使您没有使用它们之间的长度。如果您没有变量,最终可能会更频繁地阅读length
属性。
实际性能测试显示浏览器的性能不同,但使用length
属性通常比使用变量更快:
答案 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;
}