我有一些表格的对象构造函数的代码:
function objectConstructor(item, r) {
//Pulls a string from elsewhere
this.name = Object.ObjectOne[item].name;
this.amount = Object.ObjectOne[item].amount;
this.buttonID = pickButton(r);
this.itemInitialCost = [];
this.itemPriceIncrease = [];
//This is the problematic area.
if(this.name != "valueOne" || this.name != "valueTwo" || this.name != "valueThree" || this.name != "valueFour" || [...]) {
for(var i = 0; i < Object.ObjectTwo[this.buttonID].cost.length; i++) {
this.itemInitialCost.push(Object.ObjectTwo[this.buttonID].cost[i].initialCost;
this.itemPriceIncrease.push(Object.ObjectTwo[this.buttonID].cost[i].costIncrease;
}
} else {
this.itemInitialCost.push("none");
this.itemPriceIncrase.push("none");
}
}
function pickButton(r) {
//The Function
}
var array = [Long List];
for(var i = 0; i < array.length; i++) {
item = array[i];
items[item] = new objectConstructor(item, i);
console.log("Created: " + item);
}
console.log(items);
&#13;
创建前58个(67个)项目对象并为其分配值。第58个之后的所有项目都没有buttonID,因此在尝试获取其成本值时会抛出错误。为了防止这种情况,我设置了if语句来为这些项目(基于项目名称)分配&#34; none&#34;的值。为了成本。但是,他们似乎忽略了if语句中的条件,直接进入了设置正常项目成本的for循环。他们没有进入else语句,从而导致我的脚本崩溃。
为什么他们显然忽略了if语句的条件?
答案 0 :(得分:1)
this.name
的任何值都会为此评估为真:
this.name != "valueOne" || this.name != "valueTwo"
您可能希望在这些条件之间使用&&
。
另外,看看this
是否有buttonID
而不是检查名称会更有意义。
答案 1 :(得分:0)
您希望使用&&
而不是||
,因为后者(称为OR
运算符)只需要满足一个条件来评估为true(前者需要全部)。如果你有一个这些值的数组,并且你想确保它们都不匹配this.name
,你可以使用以下代码而不是输入所有名称:
if(arrayOfValues.indexOf(this.name)<0){
//assign special values
}