Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/406.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 &引用+&引用;在我的工作中表现得很奇怪_Javascript_Operators - Fatal编程技术网

Javascript &引用+&引用;在我的工作中表现得很奇怪

Javascript &引用+&引用;在我的工作中表现得很奇怪,javascript,operators,Javascript,Operators,我正在做一个数学应用程序。 在那里,我希望能够通过随机操作生成数学任务 var generator = { operations: [ "+", "-", "*", "/" ], randomOperation: function(amount) { if (amount == 2) { return this.operations[Math.round(Math.

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

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:有没有一种方法可以在这里粘贴代码而不用手动更正所有缩进?这真的很烦人:(

表达式
操作数==2 | | 4
被解析为
(操作数==2)| | 4

如果操作数==2,则为
true
,否则为
4

这两种可能的结果都是“真实的”,因此无论操作数的值是多少,总是执行
if
分支

如果希望仅在操作数为2或4时执行分支,则需要:

(operand == 2 || operand == 4)
这:

不是指“如果操作数==2,或操作数==4”--而是指“如果操作数==2,则
true
,否则
4

你想说:

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

这不是检查一个值是一个值还是另一个值的方法,代码所做的是

if ( (operand==2) || 4 )
所以id操作数是2,这是真的,否则它返回4,这是真的值。所以基本上它总是真的

这张支票需要兑现

if( operand == 2|| operand == 4)
或者你可以使用模数

if (operand %2 === 0) 
或索引

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

math.random()只返回范围
[0,1)
。使用floor操作,您只会得到
0
…使用适当缩进粘贴代码的方法是先将代码正确缩进,粘贴它,选择它,然后按
{}
按钮使其成为“code”p.s.重新输入代码:
{}
按钮,或在post editor中的Ctrl-K,将缩进所选的代码块。Marc B,但这是数学的基础。random*4。这应该在0和3之间,不是吗?@user3787706不,它将在0和3之间。这包括对断开的分支的良好解释,以及它是如何作为意外效果“短路”的。
if ([2,4].indexOf(operand)>-1)