【问题标题】:Understanding JavaScript Truthy and Falsy理解 JavaScript 真假
【发布时间】:2016-06-09 03:25:34
【问题描述】:

有人可以使用下面的示例数据解释 JavaScript 的真假。我已经阅读了其他主题,但仍然感到困惑。

var a = 0;

var a = 10 == 5;

var a = 1; 

var a = -1;

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

【问题讨论】:

标签: javascript


【解决方案1】:

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

没有。

  1. var a = 0;

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

  2. var a = 10 == 5;

    这与var a = (10 == 5); 相同,所以这是falsy

  3. var a = 1;

    var a = -1;

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

引用MDN

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

JavaScript 中的虚假值列表:From MDN

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

【讨论】:

  • 为什么document.all是假的??
  • @Claudiu document.all 过去曾用于浏览器检测,HTML 规范在这里定义了故意违反 ECMAScript 标准以保持与遗留代码的兼容性(if (document.all) { // Internet Explorer code here } 或使用document.all 不先检查其存在:document.all.foo)。
  • @Tushar:这真是太棒了……既辉煌又可怕。
  • 说到骗子,我很确定这也包括在内:)
  • 嗨@DaveNewton,除了var a = 10 == 5; 之外的其他情况肯定包含在so dupe 中。所以,IMO 不应该被当作骗子关闭。
【解决方案2】:

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

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

也就是说:

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

另见a list of all falsey values in JavaScript

【讨论】:

    【解决方案3】:

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

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


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

    【讨论】:

      【解决方案4】:

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

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

      真实

      • 所有不是 FALSY 的东西

      【讨论】:

        【解决方案5】:

        以下答案可能对某人有所帮助。

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

        以下值总是假的:

        • 0(零)
        • -0(负零)
        • 0n(BigInt 零)
        • '', "", ``(空字符串)
        • 未定义
        • NaN

        其他的都是真实的。其中包括:

        • '0'(包含单个零的字符串)
        • 'false'(包含文本“false”的字符串)
        • [](一个空数组)
        • {}(一个空对象)
        • function(){}(一个“空”函数)

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

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

        【讨论】:

          【解决方案6】:

          在 JavaScript 中,&&|| 并不总是产生布尔值。两个运算符始终返回其操作数表达式之一的值。使用双重否定 !!Boolean 函数,“truthy”和“falsy”值可以转换为正确的布尔值。

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

          Try, tried on console

          Well described here

          【讨论】:

          • 真实值是指在布尔上下文中使用的对象,而不是返回 true 或 false 的布尔值。
          【解决方案7】:

          另一个检查版本:

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

          【讨论】:

            【解决方案8】:

            简而言之,只有 6 种类型的 falsy 值: 你可以使用这个 sn-p 来测试它们:

            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

            【讨论】:

              【解决方案9】:

              检查假值和真值的简单方法

              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 
              

              【讨论】:

                【解决方案10】:

                另一种评估我喜欢使用的事物是真还是假的方法是

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

                【讨论】:

                  猜你喜欢
                  • 2011-10-09
                  • 2014-10-25
                  • 1970-01-01
                  • 2018-07-25
                  • 2012-07-17
                  • 2021-04-20
                  • 2015-03-30
                  • 1970-01-01
                  相关资源
                  最近更新 更多