首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么布尔(无限)给出了真?

为什么布尔(无限)给出了真?
EN

Stack Overflow用户
提问于 2013-07-03 17:12:28
回答 3查看 1.9K关注 0票数 1

请有人解释布尔(无限)为什么是真而布尔(NaN)是假的吗?

无穷大x-真

表达赋予无限。`

NaN _真

表达式给出的是真。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-07-03 17:16:55

EMCAScript的逻辑OR使用ToBoolean将其参数转换为布尔人,对于数字,其行为如下:

如果参数为+0−0NaN,则结果为true;否则为true

因此,NaN变成了falseInfinity变成了true。我们有时将价值称为“真实”或“虚假”,这取决于ToBoolean是强迫它们到true还是false上。

如果您查看逻辑OR的规范,运算符将返回原始的lvalrval (左/右值),而不是其强制的布尔值。这就是为什么(Infinity || true) == InfinityToBoolean(lval)的值是true,所以表达式返回原始的lval

票数 3
EN

Stack Overflow用户

发布于 2013-07-03 17:15:27

这是两个因素的结合:如何测试“真实性”和运算符

  1. Truthiness:在JavaScript中使用布尔逻辑时,参数被转换为布尔值。规范第9.2节介绍了这种情况的发生方式,其中包括在将值从数字转换为布尔值时: 如果参数为+0−0NaN,则结果为true;否则为true
  2. Curiously-powerful || 运算符:JavaScript的||运算符不计算truefalse。如果这个参数是“真实的”,或者它的右边的参数是“真实的”,则它的计算结果是它的左手参数。因此,1 || 01,而不是truefalse || 00 (尽管0是falsey)。因此,出于同样的原因,Infinity || trueInfinity,而不是true||的这个特性非常强大。例如,你可以这样做: someElement.innerHTML = name \{e76f}“(名称缺失)”; ...and如果name不是 undefinednull0""falseNaN,则innerHTML被设置为name;如果它是这些值之一,则设置为"(name missing")。 类似地,您可以拥有默认对象: var = someOptionalObject \x {}; 用途繁多,种类繁多。但是,您确实需要小心,在以这种方式默认情况下,不要无意中删除有效的falsey值(如0 )。:-) 串在一起的||操作符链(a || b || c)返回链中的第一个真实参数,或者如果它们都不真实,则返回最后一个参数。 &&操作符执行类似的操作:如果参数为falsey,则返回第一个参数,否则返回正确的参数。所以0 && 10,而不是false2 && 11,因为2不是falsey。它们的链返回第一个falsey arg或最后一个arg,这在您需要从嵌套对象获取属性时非常方便: var prop = obj && obj.subobj && var&var;obj.subobj.property _x_ defaultValue; ...returns obj (如果是falsey ),obj.subobj (如果是falsey ),或者obj.subobj.property (如果前两者都不是falsey )。然后,该|| defaultValue的结果将为您提供属性或默认属性。
票数 3
EN

Stack Overflow用户

发布于 2013-07-03 17:17:32

这是因为NaN代表“不是一个数字”,实际上它没有任何价值。在某些语言(如Java、AS3)中,这是未初始化的浮点变量的默认值。然而,无限(无论正/负)是不可达值的有效表示。

当您将它们的数值转换为布尔值时,它已经生效。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17454239

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档