如果语句忽略某些变量的值而不是其他变量的JavaScript

时间:2015-04-18 21:44:12

标签: javascript if-statement conditional-statements

我有一些表格的对象构造函数的代码:



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;
&#13;
&#13;

创建前58个(67个)项目对象并为其分配值。第58个之后的所有项目都没有buttonID,因此在尝试获取其成本值时会抛出错误。为了防止这种情况,我设置了if语句来为这些项目(基于项目名称)分配&#34; none&#34;的值。为了成本。但是,他们似乎忽略了if语句中的条件,直接进入了设置正常项目成本的for循环。他们没有进入else语句,从而导致我的脚本崩溃。

为什么他们显然忽略了if语句的条件?

2 个答案:

答案 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
}