[英]“+” behaving strangely in my functions
我正在做一個數學應用程序。 在那里,我希望能夠通過隨機運算生成數學任務。
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:有沒有一種方法可以在此處粘貼代碼,而無需手動糾正所有縮進? 這真的很煩人:(
表達式operand == 2 || 4
operand == 2 || 4
被解析為(operand == 2) || 4
(operand == 2) || 4
。
如果operand == 2
,則為true
,否則為4
。
兩種可能的結果都是“真實的”,因此無論operand
的值如何,始終采用if
分支
相反,如果您希望僅在操作數為2或4時才采用分支,則需要:
(operand == 2 || operand == 4)
這個:
if (operand == 2||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)
或indexOf
if ([2,4].indexOf(operand)>-1)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.