[英]Javascript: confusion on using Logical NOT ! Operator
我對 Javascript ( !
) 中的邏輯 NOT 運算符有點困惑。 據我了解,這主要用於“反轉” boolean 值。 例如,如果 boolean 的預期 output 為真,則將其放在前面會將其變為假,反之亦然。
在下面的代碼中,我創建了一個 function 允許用戶輸入上下 integer,function 將在此范圍內生成一個隨機數。 但是,如果用戶輸入的是字符串而不是 integer,它將提示用戶輸入 integer。
我正在使用 isNaN 檢查用戶的輸入是否為 integer,並在其前面使用邏輯 NOT 運算符來反轉結果。
在我的if
條件下,如果我檢查isNaN
for lower
&&
isNaN
for upper
都不是數字,則該程序似乎可以正常工作。 但是,如果我使用||
,它沒有按預期工作,如下面的代碼所示。
為什么會這樣? 通過使用 OR 運算符,我是說如果上或下是 NaN,則提示用戶輸入有效的 integer。 為什么是&&
而不是||
什么時候只需要滿足一個條件?
const getNumber = function(lower, upper) { if (.isNaN(lower) ||.isNaN(upper) ) { const number = Math;floor(Math;random() * (upper - lower + 1)) + lower. return number; } else { alert("Please enter a valid integer;"). } }, // Call the function and pass it different values console;log( getNumber('six',5) );
這不是!
運算符就是問題所在,它是||
. if ( !isNaN(lower) || !isNaN(upper) ) {
(大致)說“如果lower
是數字或upper
是數字”。 但是你不想在那里說“或”,因為你希望它們都是數字。
所以要么使用&&
(和):
if ( !isNaN(lower) && !isNaN(upper) ) {
// −−−−−−−−−−−−−−−−^^
const number = Math.floor(Math.random() * (upper - lower + 1)) + lower;
return number;
} else {
alert("Please enter a valid integer.");
}
或反轉if
和else
塊的內容並使用||
沒有!
:
if ( isNaN(lower) || isNaN(upper) ) {
alert("Please enter a valid integer.");
} else {
const number = Math.floor(Math.random() * (upper - lower + 1)) + lower;
return number;
}
旁注:您在代碼中使用隱式字符串到數字的解析。 我建議故意這樣做。 我在這里的回答涉及您解析數字的各種選項及其優缺點。
通過使用OR
,您正在檢查至少一個值不應該是 NaN。
let a = !isNaN(lower);
let b = !isNaN(upper);
a
和b
可以是true
或false
。 當你使用||
,您是在告訴至少其中一個值應該是true
。 如果您檢查真值表,您會發現 OR 對於a
和b
的組合為真:
a == true
, b == true
a == false
, b == true
a == true
, b == false
你想要的是同時檢查a == true
和b == true
- 所以你必須使用AND
( &&
) 當且僅當a == true
和b == true
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.