Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/463.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在for循环中有条件的第三个表达式吗?_Javascript_For Loop_Conditional - Fatal编程技术网

Javascript 在for循环中有条件的第三个表达式吗?

Javascript 在for循环中有条件的第三个表达式吗?,javascript,for-loop,conditional,Javascript,For Loop,Conditional,我想知道for循环中的第三个参数(语句/表达式?)是否可以是条件的。例如,如果要使用可选的第三个参数调用函数,则该可选参数的存在与否将决定第三个操作 function doThing(arg1, arg2, optional) { var args = arguments; for (var i = arg1; arg1 < arg2; args[2] ? i = i+optional : i++) { // Do stuff } } 函数点处理(

我想知道for循环中的第三个参数(语句/表达式?)是否可以是条件的。例如,如果要使用可选的第三个参数调用函数,则该可选参数的存在与否将决定第三个操作

function doThing(arg1, arg2, optional) {
    var args = arguments;
    for (var i = arg1; arg1 < arg2; args[2] ? i = i+optional : i++) {
        // Do stuff
    }
}
函数点处理(arg1、arg2,可选){
var args=参数;
对于(变量i=arg1;arg1

我在网上找不到任何与此相关的信息,所以我猜可能没有;如果不是,那么创建相同功能的最佳方法是什么?

否,但您始终可以通过省略增量并在循环内手动处理来重写
for
循环:

for (var i = arg1; arg1 < arg2; ) {
    // Do stuff

    if (condition) {
        i = i + optional;
    } else {
        i++;
    }
}
(变量i=arg1;arg1{ //做事 如果(条件){ i=i+可选; }否则{ i++; } } 但是,您的案例可以简化为:

for (var i = arg1; arg1 < arg2; i += (condition ? optional : 1))
for(变量i=arg1;arg1

如果逻辑比简单增量更复杂,那么使用第一个示例会更好。

否,但您可以通过省略增量并在循环内手动处理来重写
for
循环:

for (var i = arg1; arg1 < arg2; ) {
    // Do stuff

    if (condition) {
        i = i + optional;
    } else {
        i++;
    }
}
(变量i=arg1;arg1{ //做事 如果(条件){ i=i+可选; }否则{ i++; } } 但是,您的案例可以简化为:

for (var i = arg1; arg1 < arg2; i += (condition ? optional : 1))
for(变量i=arg1;arg1

如果逻辑比简单的增量更复杂,那么使用第一个示例会更好。

是的,您可以这样做,但每次迭代都需要重新评估参数[2]
,这可能会有点低效。我推荐一个稍微不同的选择:

function doThing(arg1, arg2, optional) {
    var inc = optional || 1;
    for (var i = arg1; arg1 < arg2; i += inc ) {
        // Do stuff
    }
}
函数点处理(arg1、arg2,可选){
var inc=可选| | 1;
对于(变量i=arg1;arg1

这样,您只需确定
inc
值(循环中增加
i
的量)一次,就可以在函数的其余部分重用该值。

是的,您可以这样做,但每次迭代都需要重新评估
args[2]
,这可能会有点低效。我推荐一个稍微不同的选择:

function doThing(arg1, arg2, optional) {
    var inc = optional || 1;
    for (var i = arg1; arg1 < arg2; i += inc ) {
        // Do stuff
    }
}
函数点处理(arg1、arg2,可选){
var inc=可选| | 1;
对于(变量i=arg1;arg1
这样,您只需确定
inc
值(循环中增加
i
的量)一次,就可以在函数的其余部分重用该值。

您可以执行以下操作:

var step = (optional === undefined ? 1 : optional);
for (var i = arg1; i < arg2; i += step) {
    ...
}
var步骤=(可选==未定义?1:可选);
对于(变量i=arg1;i
您可以执行以下操作:

var step = (optional === undefined ? 1 : optional);
for (var i = arg1; i < arg2; i += step) {
    ...
}
var步骤=(可选==未定义?1:可选);
对于(变量i=arg1;i
根据

您可以看到
的第三个参数是一个表达式。所以任何有效的表达式都可以在那里使用

args[2]?i=i+可选:i++
是有效的表达式

我宁愿具体说明如下:

i += args[2] ? optional : 1
依照

您可以看到
的第三个参数是一个表达式。所以任何有效的表达式都可以在那里使用

args[2]?i=i+可选:i++
是有效的表达式

我宁愿具体说明如下:

i += args[2] ? optional : 1

您的
可选
变量是否确定要增加
i
的步骤数?@showdev-在本例中是的,很抱歉没有明确说明。但我想这不一定非要。为什么使用命名参数和
args[2]
的混合语法?为什么不使用一个或另一个呢?@TedHopp只是因为我读到,
参数
的行为并不总是像一个数组,而将它们存储在一个数组中并对其进行操作会产生更可靠的结果。但是你可能会把它归结为经验不足,而不是其他原因。你的
可选的
变量是否决定了增加
i
的步骤数?@showdev-在这个例子中,是的,很抱歉没有说清楚。但我想这不一定非要。为什么使用命名参数和
args[2]
的混合语法?为什么不使用一个或另一个呢?@TedHopp只是因为我读到,
参数
的行为并不总是像一个数组,而将它们存储在一个数组中并对其进行操作会产生更可靠的结果。但你可能会把这归因于缺乏经验,而不是其他原因。考虑到许多有用的建议,很难选择答案,但我接受这一点,因为它直接解决了问题。考虑到许多有用的建议,很难选择答案,但我接受这一点,因为它直接解决了问题。@verism是的,对不起。那是个打字错误。@verism是的,对不起。那是个打字错误。