JavaScript中的所有错误值

JavaScript中的所有错误值,javascript,Javascript,JavaScript中哪些值是“false”,这意味着它们在if(value)、value?和等表达式中计算为false!值 有,但没有详尽的完整答案列出所有虚假值是什么 ,我惊讶地发现,在寻找JavaScript中完整、权威的虚假值列表时,最重要的结果是博客文章,其中一些文章有明显的遗漏(例如,NaN),并且没有一个像StackOverflow这样的格式,可以添加注释或替代答案来指出怪癖,意外、遗漏、错误或警告。所以,做一个似乎是有道理的 JavaScript中的错误值 false 编号为

JavaScript中哪些值是“false”,这意味着它们在
if(value)
value?
等表达式中计算为false!值


有,但没有详尽的完整答案列出所有虚假值是什么

,我惊讶地发现,在寻找JavaScript中完整、权威的虚假值列表时,最重要的结果是博客文章,其中一些文章有明显的遗漏(例如,
NaN
),并且没有一个像StackOverflow这样的格式,可以添加注释或替代答案来指出怪癖,意外、遗漏、错误或警告。所以,做一个似乎是有道理的

JavaScript中的错误值
  • false
  • 编号为0的类型:
    0
    以及
    0.0
    和十六进制形式的
    0x0
    ()
  • 零类型:
    0n
    0x0n
    (2020年新增)
  • 和长度为0的-string
  • null
  • 未定义
  • NaN
  • document.all
    (仅在HTML浏览器中)
    • 这是一个奇怪的<代码>文档。所有都是虚假对象,其类型为
      typeof
      undefined
      。在IE11之前,它是IE中的一个Microsoft所有者功能,并被添加到中,以便为IE编写的站点在尝试访问时不会中断,例如,
      document.all.something
      ;这是错误的,因为在条件注释之前,
      if(document.all)
      曾经是检测IE的流行方法。有关详细信息,请参阅
“Falsey”仅仅意味着JavaScript的内部函数返回
false
ToBoolean
底层
!值
如果(值)
。以下是its(自的唯一更改是添加了,始终是真实的,
BigInt
,如上所述:

参数类型 结果 未定义 返回
false
。 无效的 返回
false
。 布尔值 返回参数。 数 如果参数是
+0
-0
NaN
,则返回
false
;否则返回
true
。 一串 如果参数是空的
字符串(其长度为零),则返回
false
;否则返回
true
。 比基特 如果参数为
0n
,则返回
false
;否则返回
true
。 象征 返回
true
。 对象 返回
true

只需添加到@user568458的falsy值列表中:

  • 除整数0外,十进制数0.0、0.00或任何此类零数值也是一个伪值

    var myNum = 0.0;
    if(myNum){
        console.log('I am a truthy value');
    }
    else {
        console.log('I am a falsy value');
    }
    
    上面的代码片段打印出
    I是一个虚假值

  • 类似地,数字0的十六进制表示形式也是一个falsy值,如下面的代码段所示:

    var myNum = 0x0; //hex representation of 0
    if(myNum){
        console.log('I am a truthy value');
    }   
    else {
        console.log('I am a falsy value');
    }
    
    上面的代码片段再次打印
    我是一个伪值


不要忘记非空字符串
“false”
,它的计算结果为
true
除了主题之外,从ES2020开始,我们有一个新值,它是falsy,它是BigInt零(0n):


因此,我们现在总共有7个“falsy”值(不包括document.all,正如用户上面提到的,因为它是DOM的一部分,而不是JS)。

@tibos是一个很好的资源,并且有一个
if()
选项卡来保证真实性。哇,非常有用,谢谢!
[[]=”
但是
[]
?我的头很痛……ECMA 262规范详细说明了这些比较规则,特别是第11.9.1节至第11.9.6节:如果您更新您的答案以包含此参考,那就太棒了,因为它提供了正确/错误判断的规则(应该是)made.FYI,
if
?…:
的共同点是,它们在值上调用内部
ToBoolean
函数。这些值在
if
等上下文中的行为已经被它们的名称所暗示:它们是“falsy”值。我有点担心其他人会读到答案并认为“哦,在这种情况下(
如果
?…:
),值是
,但是使用
!!
,它是
真的
”,但不理解基本概念。另外两点:1)
v?真:假
只是一种冗长的
!!v
。2)
typeof
总是返回一个非空字符串,这是真实的。具体地看
typeof null
typeof undefined
是没有意义的。你可以说非空字符串是真实的。我明白了,但这与原始问题无关;)添加太多有点相关但不相关的信息可能会让读者感到困惑。我刚刚也学到了这一点。关于松散的比较:因为布尔值被转换为数字,
x==false
将调用
ToNumber(x)
,这与
ToBoolean(x)
非常不同。也许值得解释一下。而且我刚刚注意到,我在很久以前就已经对这个答案发表了评论:D…因此不是一个虚假的值,这是被要求的?touché。这是一个你可能会认为是错误的值,而不是,这仍然值得注意,我认为,值得在添加到列表中的综合列表中提及。。。但是,让我们不要试图把它变成一个所有可能的真实价值观的综合列表!这需要一段时间
:-)
JavaScript没有整数
0
0x0
0.0
0.00
对于相同的IEEE-754 64位浮点值0来说只是不同的文本。很好!谢谢,我还没有听说过,我已经把它添加到了大名单中,并添加了一个链接,感谢你的回答
0n == false // true
-0n == false // true
0n === false // false
-0n === false // false