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)