簡體   English   中英

為什么 ```typeof(a) != Number``` // 評估 True - 即使 typeof(a)==Number?

[英]Why does ```typeof(a) != Number``` //evaluate True - even when typeof(a)==Number?

奧丁計划的學生在這里

https://github.com/TheOdinProject/javascript-exercises/tree/solutions/sumAll

我設法讓它的總和部分起作用(所以它只是第一個 if 語句是問題)

如果非數字作為 a 或 b 傳遞,或者如果 a 或 b 是負數,他們希望返回“ERROR”。

我使用了下面的代碼。

首先,即使 a 和 b 都是數字,如果語句評估為真

他們的解決方案是使用 !Number.isInteger(a)||!Number.isInteger(b)

任何想法為什么按如下方式完成的第一個 if 語句不能按預期工作

如果我console.log(a)它記錄數字

const sumAll = function(a,b) {
    let c =0
    if((a||b)<0 || (typeof(a)||typeof(b)) !=Number){
        return "ERROR"
    }
    else if(a<b){
   for(let i=a; i<=b; i++){
       c += i;
   }
   return c ;
   }else if(a>b){for(let i=b; i<=a; i++){
    c += i;
   }
   return c;
   }
   };

如果要單獨檢查 a<0 和 b<0,則不能執行(a||b)<0 原因: a||b首先被評估,你從 a 和 b 中得到第一個真值。 因此,它成為一個順序問題。 如果您通過1,-2您將得到1作為a||b的結果,顯然1<0返回 false。

 function func(a,b){ console.log(a||b); console.log((a||b)<0); } func(1,-2); func(-1,2); func(1,2);

(typeof(a)||typeof(b)) !=Number類似問題。 您應該單獨檢查((typeof(a) != 'number') || (typeof(b) != 'number')) 請注意我如何將Number更改為'number' typeof返回注釋中提到的字符串。

您需要相應地修改您的 if 條件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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