了解 JavaScript 的真实性和虚假性

Understanding JavaScript Truthy and Falsy

本文关键字:虚假性 真实性 JavaScript 了解      更新时间:2023-09-26

有人可以使用以下示例数据解释JavaScript Truthy和Falsy吗?我已经阅读了其他线程,但仍然感到困惑。

var a = 0;
var a = 10 == 5;
var a = 1; 
var a = -1;

根据我的理解,我相信var a = 1;是唯一真实的,其余的都是虚假的——这是正确的吗?

根据我的理解,我相信var a = 1;是唯一真实的,其余的都是虚假的 - 这是正确的吗?

不。

  1. 变量 a = 0;

    数字零是假的。但是,请注意,字符串零"0"是真实的。

  2. 变量 a = 10 == 5;

    这和var a = (10 == 5);一样,所以这是假的

  3. 变量 a = 1;

    变量 a = -1;

    任何包括负数在内的非零数都是真实的

引用自MDN

在 JavaScript 中,真值是在布尔上下文中评估时转换为 true 的值。所有值都是值,除非它们被定义为值(即,除了false0""nullundefinedNaN)。

JavaScript 中的 falsy 值列表: 来自 MDN

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

有一个简单的检查方法,你可以现在和永远使用:

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

即:

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

另请参阅 JavaScript 中所有 falsey 值的列表。

Truthy -> 在布尔上下文中解析为 true 的值

Falsy -> 在布尔上下文中解析为 false 的值


为了更好地理解,下面给出了"虚假"值。
  1. false
  2. 0
  3. empty string
  4. null
  5. undefined
  6. NaN

FALSY

  • 0(零)
  • ", ", "(空字符串)
  • 定义
  • NaN(不是数字)

注意:空数组 ([]) 不是假的

真实

  • 一切不是假的

下面的答案可能会对某人有所帮助。

除了类型之外,每个值还有一个固有的布尔值,通常称为 true 或 falsy。有些规则有点奇怪,因此了解概念和对比较的影响有助于调试 JavaScript 应用程序。

以下值始终是假的:

  • 0(零)
  • -0(减零)
  • 0n (BigInt zero)
  • '
  • ', ", '' (空字符串)
  • 定义

其他一切都是真实的。这包括:

  • "0"(包含单个零的字符串)
  • "false
  • "(包含文本"false"的字符串)
  • [](空数组)
  • {}(空对象)
  • function(){} (an "empty" function)

因此,可以在条件中使用单个值。例如:

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

还有一个检查版本:

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 未明确用于设置为值。一些常见方案将创建未定义:

    在函数中
  • 定义的参数,但未在回调函数中传递参数。
  • 如果函数中没有任何返回
  • 如果访问未定义的对象属性/方法
  • 如果访问未定义的数组元素
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;
}