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