在for循环中是否可能有第三个条件表达式?
Is it possible to have a conditional third expression in a for loop?
我想知道for循环中的第三个参数(语句/表达式?)是否可以是有条件的。例如,如果要用第三个可选参数调用一个函数,则该可选参数的存在与否将决定第三个操作。
function doThing(arg1, arg2, optional) {
var args = arguments;
for (var i = arg1; arg1 < arg2; args[2] ? i = i+optional : i++) {
// Do stuff
}
}
我在网上找不到任何与此相关的东西,所以我猜可能没有;如果没有,那么创建相同功能的最佳方法是什么?
按照http://www.ecma-international.org/ecma-262/5.1/#sec-12.6.3
IterationStatement : for ( ExpressionNoIn opt ; Expression opt ; Expression opt ) Statement
您可以看到for
的第三个参数是一个表达式。因此,任何有效的表达式都可以在这里使用。
args[2] ? i = i+optional : i++
是一个有效的表达式。
我宁愿指定为:
i += args[2] ? optional : 1
你可以这样做:
var step = (optional === undefined ? 1 : optional);
for (var i = arg1; i < arg2; i += step) {
...
}
不,但是您可以通过省略增量并在循环内手动处理它来重写for
循环:
for (var i = arg1; arg1 < arg2; ) {
// Do stuff
if (condition) {
i = i + optional;
} else {
i++;
}
}
但是,您的情况可以简化为:
for (var i = arg1; arg1 < arg2; i += (condition ? optional : 1))
如果逻辑比简单增量更复杂,那么使用第一个示例会更好。
是的,您可以这样做,但这需要在每次迭代中重新评估args[2]
,这可能有点低效。我推荐一个稍微不同的替代方案:
function doThing(arg1, arg2, optional) {
var inc = optional || 1;
for (var i = arg1; arg1 < arg2; i += inc ) {
// Do stuff
}
}
这样,您只需要确定一次inc
的值(在循环中i
增加多少),然后您可以在函数的其余部分重用该值。
相关文章:
- 为什么grunt contrib connect的中间件选项的第三个参数是未定义的
- 基于两个条件退出While循环
- 如何使用PHP和JS级联三个下拉列表
- 灯光问题(使用三个.js)
- 在三个.js中创建球体(例如地球)的磁力线
- 在函数中添加多个条件
- 什么'这是从第三个函数上的async 1st函数获得结果的更好方法
- javascript第三个XMLHttpRequest被拒绝.但前两个是允许的
- 将循环中的两个文本框相乘,并在第三个文本框上显示结果
- 使用多个条件筛选ng个重复
- 根据前两个下拉ID显示第三个下拉列表
- 在数组JS中查找三个重复项
- Meteor和S3:如何通过一次上传/编辑定义三个不同的图像
- 具有多个条件的Javascript.split()函数
- If语句只执行第一个条件并运行其他条件,但没有结果
- Jquery:当两个或多个条件为true时,选择一个元素
- 如何替换javascript字符串中的前三个连字符
- 这是一个有 2 个条件的条件语句,我需要添加第三个条件
- Jquery CSS选择器需要满足三个条件
- 在for循环中是否可能有第三个条件表达式?