JavaScript中的所有错误值
JavaScript中哪些值是“false”,这意味着它们在JavaScript中的所有错误值,javascript,Javascript,JavaScript中哪些值是“false”,这意味着它们在if(value)、value?和等表达式中计算为false!值 有,但没有详尽的完整答案列出所有虚假值是什么 ,我惊讶地发现,在寻找JavaScript中完整、权威的虚假值列表时,最重要的结果是博客文章,其中一些文章有明显的遗漏(例如,NaN),并且没有一个像StackOverflow这样的格式,可以添加注释或替代答案来指出怪癖,意外、遗漏、错误或警告。所以,做一个似乎是有道理的 JavaScript中的错误值 false 编号为
if(value)
、value?
和等表达式中计算为false!值
有,但没有详尽的完整答案列出所有虚假值是什么 ,我惊讶地发现,在寻找JavaScript中完整、权威的虚假值列表时,最重要的结果是博客文章,其中一些文章有明显的遗漏(例如,
NaN
),并且没有一个像StackOverflow这样的格式,可以添加注释或替代答案来指出怪癖,意外、遗漏、错误或警告。所以,做一个似乎是有道理的 JavaScript中的错误值
false
- 编号为0的类型:
以及0
和十六进制形式的0.0
()0x0
- 零类型:
和0n
(2020年新增)0x0n
、”
和长度为0的-string”
null
未定义
NaN
(仅在HTML浏览器中)document.all
- 这是一个奇怪的<代码>文档。所有都是虚假对象,其类型为
为typeof
。在IE11之前,它是IE中的一个Microsoft所有者功能,并被添加到中,以便为IE编写的站点在尝试访问时不会中断,例如,undefined
;这是错误的,因为在条件注释之前,document.all.something
曾经是检测IE的流行方法。有关详细信息,请参阅if(document.all)
- 这是一个奇怪的<代码>文档。所有都是虚假对象,其类型为
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