我正在制作一个包含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”
答案 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)