首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JS else/else

JS else/else
EN

Stack Overflow用户
提问于 2017-11-11 20:09:01
回答 6查看 163关注 0票数 1
代码语言:javascript
复制
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时,它将生成以下输出:

  • 你见过肖申克-5
  • 你没见过肖申克-5
  • 你看过木板路帝国-5
  • 你还没见过木板路帝国-5
  • 你还没见过布莱德伦
  • 你见过拉托维尔-4
  • 你还没见过拉托维尔-4

为什么在这种情况下,代码似乎会失败呢?

我特别感兴趣的是为什么bladerunner只输出一个。唯一明显的区别是,评级属性是"string“而不是"number”。

最好的

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2017-11-11 20:20:40

else语句不使用条件表达式。else语句后面的表达式无条件地执行。

在本例中:

其他(moviesi.haswatched !== true) {console.log(“您没有看到”+ moviesi.title +“-”+ moviesi.rating);}

else语句将执行表达式(movies[i].haswatched !== true),它没有任何效果。这就像一个声明foo === true;。它被解释,执行,它对程序没有任何影响。

发布的代码相当于我添加的分号,以澄清语句的结尾:

代码语言:javascript
复制
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语句。

你可能打算这样写:

代码语言:javascript
复制
if (movies[i].hasWatched) {
  // ...
} else {
  // ...
}
票数 2
EN

Stack Overflow用户

发布于 2017-11-11 20:14:44

您需要一个if来检查另一个条件

代码语言:javascript
复制
} else if (movies[i].haswatched !== true)
//     ^^

或者省略该条件,因为您已经用一个真正的条件检查了条件,那么您只需要对else部件使用反向条件进行新的检查。

代码语言:javascript
复制
} else {
    //...
}

代码语言:javascript
复制
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);
    }
}

票数 1
EN

Stack Overflow用户

发布于 2017-11-11 20:15:41

代码语言:javascript
复制
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);
  }
}

只使用其他方法,而不是给出另一个条件。它将解决以下问题:)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47242296

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档