var movies =
[
{
title: "Shawshank",
rating: 5,
hasWatched: true
},
{
title: "Boardwalk empire",
rating: 5,
hasWatched: true
},
{
title: "bladerunner",
rating: "unkown",
hasWatched: false
},
{
title: "Ratatouille",
rating: 4,
hasWatched: true
}
]
for(var i = 0; i <movies.length; i++)
{
if(movies[i].hasWatched)
{
console.log("You have seen " + movies[i].title + " - " +
movies[i].rating);
}
else (movies[i].hasWatched !== true)
{
console.log("You have not seen " + movies[i].title + " - " +
movies[i].rating);
}
}
当我将else-if更改为else时,它会产生此输出:
为什么代码似乎在这种情况下会落空?
我特别感兴趣的是为什么bladerunner只输出一个。唯一明显的区别是评级属性是&#34;字符串&#34;而不是&#34;数字&#34;。
最佳
答案 0 :(得分:2)
else
语句不使用条件表达式。
<{1}}语句后跟的表达式无条件执行。
在这个例子中:
else
else (movies[i].haswatched !== true)
{
console.log("You have not seen " + movies[i].title + " - " +
movies[i].rating);
}
}
语句将执行表达式else
,该表达式无效。它就像一个陈述(movies[i].haswatched !== true)
。它被解释,执行,并且对程序没有任何影响。
发布的代码相当于此,我添加的分号用于澄清语句的结尾:
foo === true;
也就是说,最后一个for(var i = 0; i <movies.length; i++)
{
if(movies[i].hasWatched)
{
console.log("You have seen " + movies[i].title + " - " +
movies[i].rating);
}
else (movies[i].hasWatched !== true);
console.log("You have not seen " + movies[i].title + " - " + movies[i].rating);
}
语句总是执行。
你可能想这样写:
console.log
答案 1 :(得分:1)
您需要if
来检查其他条件
} else if (movies[i].haswatched !== true)
// ^^
或省略条件,因为您已经检查了具有真实条件的条件,那么您只需要else
部分没有反向条件的新检查。
} else {
//...
}
var movies = [{ title: "Shawshank", rating: 5, hasWatched: true }, { title: "Boardwalk empire", rating: 5, hasWatched: true }, { title: "bladerunner", rating: "unkown", hasWatched: false }, { title: "Ratatouille", rating: 4, hasWatched: true }],
i;
for (i = 0; i < movies.length; i++) {
if (movies[i].hasWatched) {
console.log("You have seen " + movies[i].title + " - " + movies[i].rating);
} else {
console.log("You have not seen " + movies[i].title + " - " + movies[i].rating);
}
}
答案 2 :(得分:1)
for(var i = 0; i <movies.length; i++)
{
if(movies[i].hasWatched)
{
console.log("You have seen " + movies[i].title + " - " + movies[i].rating);
}
else
{
console.log("You have not seen " + movies[i].title + " - " +
movies[i].rating);
}
}
只使用其他而不是给出另一个条件。它会解决问题:)
答案 3 :(得分:0)
你已经被JavaScript倾向于与你所经历的任何事情一起玩......
当您有using
语句时,if .. else
条件在else
条件为假时执行。在您的情况下,该语句只是括号内的比较,就像您写的那样:
if
完全合法,不太有用。
之后,你有另一段有效的代码,一个简单的块,如下所示:
var something = 1;
(something === 1);
同样,完全合法,但在其中,没有用。
那么这怎么会导致你看到的输出?
嗯,var something = 1;
{
alert(something);
}
之后的代码块会针对每个项目执行 。你总是看到&#34;你还没有看到......&#34;。 if .. else
部分还会使用if
打印这些项目。
哦,那Bladerunner排?这只是该对象hasWatched === true
的价值......
答案 4 :(得分:0)
如果您给else
条件,则认为它是if
不正确时应执行的代码。因此,下面的代码被视为每次运行的另一个块。
尝试运行:
if (false) {
console.log("hello")
} else(console.log("whoops")) // this turns into the else block to be run when if is false.
{
console.log("goodbye") // this runs every time.
}
&#13;
这是因为您可以(但可能不应该)这样写if/else
:
if (false)
console.log("if")
else console.log("else")
添加括号不会更改else块。这是相同的:
if (false)
console.log("if")
else (console.log("else"))
答案 5 :(得分:0)
简短的回答是(如其他几个答案所述):else
语句不接受/评估谓词。
if-else是一个表达式,用于在程序流程中创建两个分支,并让评估的结果选择流程if
语句的predicate 。
将谓词评估为 Boolean条件后,根据结果是true
还是false
, if-将分别执行表达式的块或* else-block *。
让我们说流动的程序执行两个语句:(开始)和(结束)
// (beging)
// (end)
该程序的流程如下:
(begin)
|
|
(end)
我们在前一个程序的中间注入一个if-else
表达式,如下所示:
// (begin)
if( predicate ) {
// (A) if-block
}
else {
// (B) else-block (or alternative-block)
}
// (end)
等效* 为:
// (begin)
if( predicate ) {
// (A) if-block
}
else if ( !predicate ){
// (B) else-block (or alternative-block)
}
// (end)
现在流程改为:
(begin)
|
|
/ \
/ \
(A) (B)
\ /
\ /
|
|
(end)
我们可以链接if-else
表达式并创建if else-if else
表达式。为此,我们需要有if
语句,后跟任意数量的else if
(或在某些语言elif
中)语句,最后是else
语句:
// (begin)
if( predicate_1 ) {
// (A) if-block
}
else if ( predicate_2 ){
// (B) else-if-block (or alternative-block)
}
// more else-if statements can be added here
else {
// (C) else-block (or otherwise-block)
}
// (end)
因此,如果我们查看流程,添加else-if
语句,会增加我们从(开始)到(结束)
(begin)
|
|
/|\
/ | \
/ | \
/ | \
(A) (B) (C)
\ | /
\ | /
\ | /
\|/
|
|
(end)
*注意:在某些语言中,如Haskell,您需要具有完整的条件表达式(例如,如果需要缩短条件表达式中的间隙,则需要else
语句)。例如,在Haskell中,以下内容将无法编译:
if predicate_1
then -- if block
else if predicate_2
then -- else-if block
这是因为最后需要一个else
语句来缩小差距,所以以下修复了错误:
if predicate_1
then -- if block
else if predicate_2
then -- else-if block
else -- else block