簡體   English   中英

“ +”在我的功能中表現異常

[英]“+” 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM