我有一个for循环,用于从数组中绘制东西到画布。该数组包含一堆变量。
这些变量包含firstName
,lastName
,team
等定性值。
我知道变量设置正确,因为我使用它们的其他函数运行正常。但是,我有一个for
循环,假设只有在team ='blue'时才在画布上绘制圆圈。
问题在于它将它们全部识别为“蓝色”并将它们全部拉出来,而实际上只有少数是“蓝色”而其他都是“红色”,“绿色”等。
这是代码:
ctx.fillGroups = function(g){
for ( var i=0; i<allSeating.length; ++i ){
if (allSeating[i.team]=g){
ctx.beginPath();
ctx.fillPerson(allSeating[i]);
//alert(allSeating[i.team]);
}
}
}
当alert()
处于活动状态时,我可以看到它认为它们都是蓝色的。
我猜测问题在于:if (allSeating[i.team]=g)
但我似乎无法让它发挥作用。 allSeating[i.team]=g
的检查是否需要在其他地方进行?但是,为什么它认为他们都是blue
团队呢?
更新:此处仍未使用的是演示http://jsfiddle.net/8ryvH/1/
答案 0 :(得分:4)
问题是=
设置变量...使用allSeating[i.team]===g
正在进行的是您为g
中的每个元素分配allSeating[i.team]
到allSeating
。 =
运算符在JavaScript中不会像在VB或SQL中那样执行相同的操作 - 在这些语言中x = y
是等效性测试或赋值,具体取决于上下文。在JavaScript(以及我能想到的大多数其他语言)中,=
仅用于赋值,而==
(以及JavaScript中的===
)用于测试相等性。
==
执行类型转换以检查相等性,而===
则不行。 ("1" == 1 // true
但"1" === 1 // false
)
答案 1 :(得分:3)
allSeating[i.team]=g
不是检查:它是一个赋值语句。
而allSeating[i.team]==g
呢? (我错过了什么吗?)
Mozilla Developer's Network JavaScript Documentation对于这类事情来说是一个很好的资源。
<强>更新强>
如其他地方所述,此处的内容多于=
或===
。
我们在聊天中注意到allSeating[i].team === g
可能是您想要评估的内容,但事情仍然没有加起来。
我认为seat
对象是问题,或者更确切地说是它的实例化。
该定义具有八个属性,但您的实例化只有七。
为fillStyle
属性添加值,如下所示,为我纠正了问题,allSeating[i].team === g
现在评估为真。
var markTwain = new Seat(758, 180, 9,
的填充样式下,"Mark", "Twain", 6207, "red");
如果你遇到麻烦,请告诉我。