如果

时间:2017-11-11 20:09:01

标签: javascript arrays object if-statement

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时,它会产生此输出:

  • 你见过Shawshank - 5
  • 你还没有见过Shawshank - 5
  • 你见过Boardwalk帝国 - 5
  • 你还没有见过Boardwalk帝国 - 5
  • 你还没有见过bladerunner - unkown
  • 你见过Ratatouille - 4
  • 你还没有见过料理鼠王 - 4

为什么代码似乎在这种情况下会落空?

我特别感兴趣的是为什么bladerunner只输出一个。唯一明显的区别是评级属性是&#34;字符串&#34;而不是&#34;数字&#34;。

最佳

6 个答案:

答案 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不正确时应执行的代码。因此,下面的代码被视为每次运行的另一个块。

尝试运行:

&#13;
&#13;
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;
&#13;
&#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 *。

没有if-else的简单程序

让我们说流动的程序执行两个语句:(开始)(结束)

// (beging)
// (end)

该程序的流程如下:

   (begin)
      |
      |
    (end)

使用if-else

的简单程序

我们在前一个程序的中间注入一个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

的简单程序

我们可以链接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