请有人解释布尔(无限)为什么是真而布尔(NaN)是假的吗?
无穷大x-真
表达赋予无限。`
NaN _真
表达式给出的是真。
发布于 2013-07-03 17:16:55
EMCAScript的逻辑OR使用ToBoolean将其参数转换为布尔人,对于数字,其行为如下:
如果参数为
+0、−0或NaN,则结果为true;否则为true。
因此,NaN变成了false,Infinity变成了true。我们有时将价值称为“真实”或“虚假”,这取决于ToBoolean是强迫它们到true还是false上。
如果您查看逻辑OR的规范,运算符将返回原始的lval或rval (左/右值),而不是其强制的布尔值。这就是为什么(Infinity || true) == Infinity:ToBoolean(lval)的值是true,所以表达式返回原始的lval。
发布于 2013-07-03 17:15:27
这是两个因素的结合:如何测试“真实性”和运算符。
+0、−0或NaN,则结果为true;否则为true。|| 运算符:JavaScript的||运算符不计算true或false。如果这个参数是“真实的”,或者它的右边的参数是“真实的”,则它的计算结果是它的左手参数。因此,1 || 0是1,而不是true;false || 0是0 (尽管0是falsey)。因此,出于同样的原因,Infinity || true是Infinity,而不是true。
||的这个特性非常强大。例如,你可以这样做:
someElement.innerHTML = name \{e76f}“(名称缺失)”;
...and如果name不是 undefined、null、0、""、false或NaN,则innerHTML被设置为name;如果它是这些值之一,则设置为"(name missing")。
类似地,您可以拥有默认对象:
var = someOptionalObject \x {};
用途繁多,种类繁多。但是,您确实需要小心,在以这种方式默认情况下,不要无意中删除有效的falsey值(如0 )。:-)
串在一起的||操作符链(a || b || c)返回链中的第一个真实参数,或者如果它们都不真实,则返回最后一个参数。
&&操作符执行类似的操作:如果参数为falsey,则返回第一个参数,否则返回正确的参数。所以0 && 1是0,而不是false。2 && 1是1,因为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的结果将为您提供属性或默认属性。发布于 2013-07-03 17:17:32
这是因为NaN代表“不是一个数字”,实际上它没有任何价值。在某些语言(如Java、AS3)中,这是未初始化的浮点变量的默认值。然而,无限(无论正/负)是不可达值的有效表示。
当您将它们的数值转换为布尔值时,它已经生效。
https://stackoverflow.com/questions/17454239
复制相似问题