我不明白 &&
, ||
, 和 !
在布尔值和其他数据类型中是如何工作的。你该如何使用它们?
我不明白 &&
, ||
, 和 !
在布尔值和其他数据类型中是如何工作的。你该如何使用它们?
a && b
评估为第一个虚假操作数,a || b
评估为第一个真实操作数。这两个运算符不会评估返回之后的任何操作数。如果所有操作数都不匹配,则它们将评估为最后一个操作数。
!a
如果a
是虚假的,则评估为true
,如果a
是真实的,则评估为false
。所有值都是真值,除了以下的falsy:
null
undefined
false
+0
-0
NaN
0n
""
document.all
undefined
是一个值,但还有一个变量undefined
默认持有此值。另外NaN
没有等于任何东西,甚至不等于自己。 - Ivo Wetzel!NaN
是true
,因此NaN
是虚假的。 - SLaksNaN
或其他任何值提出其他要求。 - Sasha Chedygovdocument.all
? - Pointydocument.all
是微软的专有属性,而 IE 不支持新兴的 DOM 标准,因此代码会这样写:if (document.all) { /* MS-specific code */ } else { /* DOM standard code */ }
。时间过去了,A) 微软实现了 DOM 标准,B) 其他浏览器添加了 document.all
来支持无条件依赖它的代码。但是那些页面中的代码没有更新。为了避免像那样编写只针对 Microsoft 的分支的代码,Chrome 和 Firefox 将 document.all
设为 falsy。最终,IE 也这样做了。现在已经标准化了。 :-D - T.J. Crowder如果你想测试两个条件都为真,则使用 &&:
if (isX && isY)
{
// Do something.
}
如果你想测试两个条件中的一个或者两个都为真,那么使用 ||:
if (isX || isY)
{
// Do something.
}
!
可以倒置一个布尔值(真值变为假,反之亦然)。
document.write("Cat"||"Dog")
是什么意思? - DarkLightA||
为默认运算符,因此"Cat" || "Dog"
应该读作cat,默认为dog
。个人而言,我将其解读为cat,否则dog
。 - slebetman