以下代码获取不同浏览器的窗口大小。
<!DOCTYPE html>
<html>
<body>
<p id="demo"></p>
<script>
var w = window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth;
var h = window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight;
var x = document.getElementById("demo");
x.innerHTML = "Browser inner window width: " + w + ", height: " + h + ".";
</script>
</body>
</html>
我想问window.innerWidth或document.documentElement.clientWidth等..它们不是布尔值,我该如何使用||申报变量? w / h是数字,如果我执行以下操作就好了:
var k = aaa || bbb || 45;
k应该是一个数字,这是非法的,对吧? 那么第一段代码怎么可以工作呢? 感谢〜
答案 0 :(得分:2)
这是因为Javascript中falsy和truthy值的概念。
如果您在布尔上下文中使用它们,则 0
,null
和undefined
都会评估为false
。因此,您可以进行如上所述的分配 - var k
的值将是第一个真正的变量。
var k = aaa || bbb || 45;
如果aaa
是真实的(所以,数字或某个定义的值),那么k
就会成为那个,或者如果它是真的那就变成b
,否则它就变成了数字45
。
答案 1 :(得分:0)
我意识到你现在很可能已经得到了答案,但我仍然会发布一个答案,因为: a。这个问题很重要,肯定会有足够数量的未来观众。 b。其他答案并未解释ToBoolean
和||
之间的关系 c。我必须更改并添加太多if我是编辑另一个答案,所以...
在JavaScript中,||
和&&
逻辑运算符都会强制将其操作数强制转换为boolean
,如果它们不是布尔值,则使用抽象ToBoolean
操作。
您可以使用ToBoolean
构造函数或隐式Boolean
转换来查看此!!
操作的效果:
Boolean(foo);
!!foo;
上面两行中的任何一行都会将foo
转换为布尔值。
但他们是怎么做到的?
很简单:如果变量foo
是null
,undefined
,NaN
,0
,或""
(您也可以说false
,但这很明显),它将成为false
;在所有其他情况下,它将变为true
。
在false
强制(可以由上述任一行执行)之后变为ToBoolean
的值被称为&#34;虚假值&#34;。你能猜出调用true
操作后变为ToBoolean
的值是什么?
以下是一些ToBoolean
操作的示例:
const foo = "abc";
console.log(!!foo); // Prints out "true"
console.log(Boolean(foo)); // Same thing as above
const bar = "";
const baz = undefined;
console.log(Boolean(bar)); // Prints out "false"
console.log(Boolean(baz)); // Prints out "false"
/* Prints out "abc", because both "bar" and "baz" will become "false" after "||" coerces them to "boolean"*/
console.log(bar || baz || foo);
&#13;
因此,在您的示例中,如果aaa
是&#34; falsy&#34;我在上面列出的值,JavaScript将跳过它并转到||
的下一个操作数,如果该操作数不是假值,它将由||
选择。
作为旁注,||
将永远停留在第一个&#34; truthy&#34;值,如果没有真值,它将选择最后一个操作数。
<小时/> Here是指向
ToBoolean
的链接。