1 回答
TA贡献1841条经验 获得超3个赞
您是对的,if 和 else 条件仅在“非此即彼”的基础上执行。if 和 else 条件不能在同一次迭代或一次函数调用中执行。
然而,在您共享的代码中,有一个 for 循环正在迭代“words”数组,这可能是您感到困惑的原因。
for 循环本质上会调用循环内的任何内容 n 次,直到不满足结束条件。在这种情况下,只要words数组在当前元素之后还有更多元素即可。
因此,如果您的单词数组有 2 个单词,则 for 循环将调用内部 if 和 else 语句块 2 次:
第一次,因为 'i' 的值为 0,小于words.length(words.length 为 2,因此words.length-1 为 1),因此将调用您的 else 条件。
第二次,因为i的值等于words array的长度- 1(即1),所以if条件满足,if将被执行。
words = ['Hello', 'world']
var sentence = '';
for (var i = 0; i < words.length; i++) {
if (i === words.length - 1) {
console.log('if condition: ', words[i]);
sentence += words[i] + '.';
} else {
console.log('else condition: ', words[i]);
sentence += words[i] + ' ';
}
}
console.log(sentence);
上面的代码与下面的代码的工作方式相同:
words = ['Hello', 'world']
function ifElseBlock() {
if (i === words.length - 1) {
console.log('if condition: ', words[i]);
sentence += words[i] + '.';
} else {
console.log('else condition: ', words[i]);
sentence += words[i] + ' ';
}
}
var sentence = '';
for (var i = 0; i < words.length; i++) {
ifElseBlock();
}
console.log(sentence);
正如我们所看到的,在这两种情况下,for 循环都会执行两次,因为words 数组有 2 个元素。
我相信下面的代码会进一步澄清它:
const words = ['hello', 'world']
let sentence = '';
if (0 === words.length - 1) {
sentence += words[1] + '.';
} else {
sentence += words[0] + ' ';
}
console.log(sentence)
这次只执行 else 条件,因为我没有使用循环来迭代words数组,而是在if条件中硬编码了0,并将其与words.length-1进行比较,这将是1,因为words数组的长度是2.
添加回答
举报