为什么forEach更改我的布尔值?

时间:2018-08-25 23:37:02

标签: javascript arrays object

我正在制作一个包含3部电影的电影数据库。我想制作一个函数,当“ haveSeen:true”时接受一个参数(数组)和console.log(“您已经看过这部电影”)

var movies = [
     {
      title: ...,
      haveSeen: true
     },
     {
      title: ...,
      haveSeen: true
     },
     {
      title: ...,
      haveSeen: false
     }
]




 function display(arr) {
  arr.forEach(function(element) {
    if(element.haveSeen = true) {
      console.log("You have watched this movie")
    }
  })
}

当我在控制台中运行“ display(movies)”时。控制台会将haveSeen的所有布尔值更改为“ true”。为什么?我希望控制台仅两次console.log,因为我只将两部影片设置为“ haveSeen:true”

2 个答案:

答案 0 :(得分:1)

您的问题是,在您的函数中,您有以下一行:

if(element.haveSeen = true) { 

单个=是赋值运算符,仅在为变量赋值时使用。将其更改为===即可使用:

if(element.haveSeen === true) { 

或者因为它是布尔值,所以完全删除比较:

if(element.haveSeen) { 

答案 1 :(得分:0)

您需要了解赋值运算符=等价运算符==和等于运算符===之间的区别。

让x = 1; 如果(x = 2)始终是真实的,因为您刚刚为x分配了2且2是真实的。

===运算符是您在测试某项是否等于其他项时要使用的。

如果(x === 1)为true并且(x === 2)为false

==等价运算符是您可能会看到的另一件事,但是许多编码标准都不鼓励使用它,因为结果可能并不总是您所期望的。就像(2 =='2')是真的,因为整数2等效于字符串2,但是从(2 ==='2')的意义上说,它们不相等。

看到要测试的是布尔值,就不需要任何运算符,只需使用

if (element.haveSeen)