作为javascript开发人员,我们都必须编写很多for循环.在几个月之前,我看到了另一种语法,我非常喜欢.但是,我现在感兴趣,还有其他好方法.
假设我有一个表示系统中用户的数据数组.我之前做的是:
var users = [
{ name: "A"},
{ name: "B"},
{ name: "C"},
{ name: "D"},
{ name: "E"}
];
var numOfUsers = users.length;
for(var i=0; i<numOfUsers; i++) {
var user = users[i];
// ...
}
Run Code Online (Sandbox Code Playgroud)
还有一行var user = users[i];.通常情况下,如果我有user代替,我感觉更舒服users[i].所以,新的方式:
for(var i=0; user=users[i]; i++) {
// ...
}
Run Code Online (Sandbox Code Playgroud)
我也想知道第二种方法是否会在某些浏览器中产生问题.我的一位同事报告说这种语法在IE下有点儿麻烦.
编辑:谢天谢地,下面的答案向我指出了正确的方向.如果数组的某些元素是假的,那么循环将停止.有某种解决方案:
for(var i=0; typeof (user=users[i]) !== "undefined"; i++) {
// ...
}
Run Code Online (Sandbox Code Playgroud)
但这对我来说太过分了.所以,我猜我只有在100%确定所有元素都是真的时才会使用这种语法(这意味着永远不会:)).
在您的"新"方法中,您不再需要numOfUsers了.
至于潜在的问题:这种方法依赖于所有users[i]具有值的值来评估true循环是否继续(并且在最后一个用户被处理之后user变为undefined,等于false并因此结束循环) - 但有时你可能有数据而不是每个记录都评估to true,但"false-y"值也可能出现在数据中 - 在这种情况下,这种方法当然会失败.