簡體   English   中英

Javascript:使用邏輯非的混淆! 操作員

[英]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.");
}

或反轉ifelse塊的內容並使用|| 沒有!

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);

ab可以是truefalse 當你使用|| ,您是在告訴至少其中一個值應該是true 如果您檢查真值表,您會發現 OR 對於ab的組合為真:

  • a == trueb == true
  • a == falseb == true
  • a == trueb == false

你想要的是同時檢查a == trueb == true - 所以你必須使用AND ( && ) 當且僅當a == trueb == true

暫無
暫無

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

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