Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么forEach会更改我的布尔值?_Javascript_Arrays_Object - Fatal编程技术网

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

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

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


当我在控制台中运行“显示(电影)”时。控制台将把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) {