簡體   English   中英

理解 JavaScript 真假

[英]Understanding JavaScript Truthy and Falsy

有人可以使用下面的示例數據解釋 JavaScript 真假。 我已經閱讀了其他主題,但仍然感到困惑。

var a = 0;

var a = 10 == 5;

var a = 1; 

var a = -1;

據我了解,我相信var a = 1; 是唯一的真理,而 rest 是虛假的 - 這是正確的嗎?

據我了解,我相信 var a = 1; 是唯一真實的,其余的都是虛假的 - 這是正確的嗎?

不。

  1. 變量 a = 0;

    數字零是虛假的。 但是,請注意字符串零"0"是真實的。

  2. 變量 a = 10 == 5;

    這與var a = (10 == 5); ,所以這是的。

  3. 變量 a = 1;

    變量 a = -1;

    包括負數在內的任何非零數都是真實的。

引用MDN

在 JavaScript 中,值是在布爾上下文中計算時轉換為真的值。 所有值都是真實的,除非它們被定義為虛假(即,除了false0""nullundefinedNaN )。

JavaScript 中的虛假值列表:來自 MDN

  1. false
  2. null
  3. undefined
  4. 0
  5. NaN
  6. '' , "" , `` (空模板字符串)
  7. document.all
  8. 0n :大整數
  9. -0

有一種簡單的檢查方法,您可以現在和永遠使用它:

function truthyOrFalsy(a) {
    return a ? "truthy" : "falsy";
}

以機智:

> truthyOrFalsy(0)
"falsy"
> truthyOrFalsy(10 == 5)
"falsy"
> truthyOrFalsy(1)
"truthy"
> truthyOrFalsy(-1)
"truthy"

另請參閱JavaScript 中所有錯誤值的列表

Truthy -> 在布爾上下文中解析為 true 的值

Falsy -> 在布爾上下文中解析為 false 的值


為了更好地理解,下面給出了 `falsy` 值。
  1. false
  2. 0
  3. empty string
  4. null
  5. undefined
  6. NaN

假的

  • 錯誤的
  • 0(零)
  • "", '', ``(空字符串)
  • 無效的
  • 不明確的
  • NaN(不是數字)

注意:空數組([])不是假的

真實的

  • 所有不是 FALSY 的東西

以下答案可能對某人有所幫助。

除了類型之外,每個值還具有固有的布爾值,通常稱為真值或假值。 有些規則有點奇怪,所以理解概念和比較的效果有助於調試 JavaScript 應用程序。

以下值總是虛假的:

  • 錯誤的
  • 0(零)
  • -0(減零)
  • 0n(BigInt 零)
  • '', "", `` (空字符串)
  • 無效的
  • 不明確的

其他一切都是真實的。 那包含着:

  • '0'(包含單個零的字符串)
  • 'false'(包含文本“false”的字符串)
  • [](一個空數組)
  • {}(空對象)
  • function(){}(一個“空”函數)

因此,可以在條件內使用單個值。 例如:

if (value) { // value is truthy } else { // value is falsy // it could be false, 0, '', null, undefined or NaN }

在 JavaScript 中, &&|| 不要總是產生布爾值。 兩個運算符始終返回其操作數表達式之一的值。 使用雙重否定!! Boolean函數,“真”和“假”值可以轉換為適當的布爾值。

true && true =>
true

true && false =>
false

true && 'rahul626'=>
"rahul626"

true && 'i am testing Truthy' && ' upvote it'=>
" upvote it"

試試,在控制台上試過

這里描述得很好

另一個檢查版本:

function truthyOrFalsy(a) {
    return (a && "truthy") || "falsy";
}

簡而言之,只有 6 種類型的假值:您可以使用此代碼段來測試它們:

function isTruthy(val){
    if(val){
        console.log(val + ' is Truthy');
    }else{
        console.log(val + ' is falsy');
    }
}
    

// all below are truthy
isTruthy (true)
isTruthy ({})
isTruthy ([])
isTruthy (42)
isTruthy ("0")
isTruthy ("false")
isTruthy (new Date())
isTruthy (-42)
isTruthy (12n)
isTruthy (3.14)
isTruthy (-3.14)
isTruthy (Infinity)
isTruthy (-Infinity)

//all below are falsy
isTruthy(0);
isTruthy("");
isTruthy(false);
isTruthy(NaN);
isTruthy(null);
isTruthy(undefined);

有關詳細信息,請參閱此站點: https ://developer.mozilla.org/en-US/docs/Glossary/Falsy

檢查假值和真值的簡單方法

function truthyOrFalsy(val){
  if(val){
    console.log (`${val} is truthy`);
  } else{
    console.log (`${val} is falsy`);
  }   
}

檢查所有 FALSY 值:

truthyOrFalsy(false);      //Output: false is falsy
truthyOrFalsy(null);       //Output: null is falsy
truthyOrFalsy(0);          //Output: 0 is falsy
truthyOrFalsy('');         //Output:  is falsy  [blank refers to '']
truthyOrFalsy(NaN);        //Output: NaN is falsy
truthyOrFalsy(undefined);  //Output: undefined is falsy

請注意, undefined未明確用於設置為值。 一些常見的場景會創建 undefined:

  • 在函數中定義的參數,但在回調函數中未傳遞參數。
  • 如果函數中沒有返回
  • 如果訪問未定義的對象屬性/方法
  • 如果訪問未定義的數組元素
function add(num1, num2){   
    console.log(num1, num2);    
}
const result = add(44);
console.log(result);
//Output: 44 undefined
//        undefined

const car = {color:"Blue", price: 200000};
console.log(car.category);
//Output: undefined
arrColors = ["Blue", "Sky", "Purple"];
console.log(arrColors[5]);
//Output: undefined

檢查所有真實值

所有值都是真值,除非它們被定義為假值。

雖然' ', '0', -1, []可以登記進行檢查。

truthyOrFalsy(' ');      //Output: is truty     [blank refers to space inside 
                         //                       quote ]
truthyOrFalsy('0');       //Output: 0 is truty 
truthyOrFalsy([]);          //Output: is truty  [blank refers to an empty array]
truthyOrFalsy(-1);         //Output: -1 is truty 

另一種評估我喜歡使用的事物是真還是假的方法是

function truthyOrFalsy(a) {
  return !!a;
}

暫無
暫無

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

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