Javascript 为什么forEach会更改我的布尔值?
我正在制作一个包含3部电影的电影数据库。我想制作一个函数,当“haveSeen:true”时,它接受一个参数(数组)和console.log(“您已经看过这部电影”)Javascript 为什么forEach会更改我的布尔值?,javascript,arrays,object,Javascript,Arrays,Object,我正在制作一个包含3部电影的电影数据库。我想制作一个函数,当“haveSeen:true”时,它接受一个参数(数组)和console.log(“您已经看过这部电影”) 当我在控制台中运行“显示(电影)”时。控制台将把haveSeen的所有布尔值更改为“true”。为什么?我希望控制台只显示console.log两次,因为我只将两个电影设置为“haveSeen:true”您需要了解赋值运算符=等价运算符==和相等运算符==之间的区别 设x=1; if(x=2)将始终是真实的,因为您刚刚将2分配给x
当我在控制台中运行“显示(电影)”时。控制台将把haveSeen的所有布尔值更改为“true”。为什么?我希望控制台只显示console.log两次,因为我只将两个电影设置为“haveSeen:true”您需要了解赋值运算符=等价运算符==和相等运算符==之间的区别 设x=1; if(x=2)将始终是真实的,因为您刚刚将2分配给x,并且2是真实的 ===运算符是在测试某事物是否等于其他事物时要使用的运算符 如果(x==1)为真,而(x==2)为假 ==等价运算符是人们使用的另一个东西,但许多编码标准不鼓励使用它,因为结果可能并不总是您所期望的。在(2=='2')中为真,因为在整数中2等同于字符串2,但它们在(2=='2')意义上不相等 看到您正在测试一个布尔值,您不需要任何运算符,只需使用
if (element.haveSeen)
您的问题是,在您的函数中,您有以下行:
if(element.haveSeen = true) {
单个=
是赋值运算符,仅在为变量赋值时使用。将此更改为==
,它将工作:
if(element.haveSeen === true) {
或者因为它是布尔值,所以完全删除比较:
if(element.haveSeen) {
if(element.haveSeen=true)
应该是if(element.haveSeen==true)
或者只是if(element.haveSeen)
=
是赋值运算符,所以您的属性被赋值到true
@Xufox当然我完全忘了!谢谢equality==运算符通常不鼓励使用equals==运算符。==执行类型强制,==检查类型和值是否相等。
if(element.haveSeen) {