" +"在我的职能中表现得很奇怪

时间:2015-11-25 21:14:42

标签: javascript operators

我正在制作一个数学应用程序。 在那里,我希望能够通过随机操作生成数学任务。

var generator = {

    operations: [
        "+",
        "-",
        "*",
        "/"
    ],

    randomOperation: function(amount) {
        if (amount == 2) {
            return this.operations[Math.round(Math.random())];
        }
        if (amount == 4) {
            return this.operations[Math.floor(Math.random() * 4)];
        }
    },

    addOperand: function(operand, maxSize, minSize) {
        var op = operand;
        console.log('op ' + op);
        if (operand == 2||4) {
            console.log('getting random operand');
            op = this.randomOperation(operand);
        }
        var number = this.randomNumber(maxSize, minSize);
        console.log('number ' + number);

        this.tasks.push({
            value: number,
            operation: op
        });
        console.log('added ' + op + ' ' + number);
    }
    // other stuff
}

所以我希望能够使用不同的参数调用该方法: ' +',如果我绝对希望它是+ ' - ',如果我想要 - 等等 如果我传递一个数字(2或4),它应该随机生成2(+ - )或4(+ - * /)

但是真的很奇怪......

控制台输出是:

op +
getting random operand
number 2
added undefined 2

为什么' +'考虑2 || 4? 它显然是作为' +',然后以某种方式...传递给randomOperation(),当然,它什么都不返回。

感谢

PS:有没有办法在这里粘贴代码而不用手动纠正所有缩进的痛苦?它真的很烦人:(

3 个答案:

答案 0 :(得分:5)

表达式operand == 2 || 4被解析为(operand == 2) || 4

如果true,则为operand == 2,否则为4

两种可能的结果都是" truthy",因此无论if

的值如何,始终都会使用operand分支

如果您希望仅在操作数为2或4时才采用分支,则需要:

(operand == 2 || operand == 4)

答案 1 :(得分:2)

此:

if (operand == 2||4) {

并不意味着"如果操作数== 2,或操作数== 4" - 它表示"如果操作数== 2,则true,否则为4

你想说:

if ((operand == 2) || (operand == 4)) {

答案 2 :(得分:2)

这不是你如何检查价值是否是一个或另一个。该代码正在做什么

if ( (operand==2) || 4 )

所以id操作数是2是真的,否则返回4是真值。所以基本上它总是如此。

支票需要

if( operand == 2|| operand == 4)

或者您可以使用模数

if (operand %2 === 0) 

或indexOf

if ([2,4].indexOf(operand)>-1)