Sim*_*ger 1 javascript for-loop abbreviation
使用jQuery for循环非常慢,这就是我考虑更频繁地使用常规for语句的原因.为了直接访问当前元素,我发现了以下语法(对于常规数组,当然不是对象):
for (var i = 0, e; e = array[i]; i++) { ... }
Run Code Online (Sandbox Code Playgroud)
e循环中的哪个位置表示当前元素.
这种语法在所有浏览器中都可以安全使用吗?
加成
好吧,我想这可行,但对于简短的符号它不再那么有用了:
for (var i = 0, e; (e = array[i]) !== void(0); i++) { ... }
Run Code Online (Sandbox Code Playgroud)
谢谢大家回答!
那不是一个很好的循环.考虑这个数组:
var array = [0, 1, 2, 3];
Run Code Online (Sandbox Code Playgroud)
它将停在第一个元素上,因为它0是一个假值.与...相同
var array = ["foo", "bar", false, "hello"];
Run Code Online (Sandbox Code Playgroud)
它只会到达"foo"和"bar"
考虑使用这个循环
for (var i=0, len=array.length; i<len; i++) { ... }
Run Code Online (Sandbox Code Playgroud)
它适用于任何地方,只计算array.length一次,并且性能很好.
根据TJ的评论,args i及len以上的范围将存在于您当前的功能中.所以要小心你不要做出可变的冲突.
一种有点常见(但很笨重)的防范方法是为vars添加前缀_.像这样
for (var _i=0, _len=array.length; _i<_len; _i++) { ... }
Run Code Online (Sandbox Code Playgroud)