为了获得浏览器视口宽度,我看到了这种结构:
function () { return window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth; }
我理解涉及的浏览器怪癖.我不明白的是为什么||返回值.所以我尝试了这个警报(undefined || 0 || 3);果然,它提醒3.我觉得这很离奇,因为我期待真假.谁能解释一下发生了什么?
解决方法:
看看ECMAScript标准部分11.11 Binary Logical Operators
The production LogicalORExpression :
LogicalORExpression ||
LogicalANDExpression is evaluated as
follows:1.Evaluate LogicalORExpression.
2.Call GetValue(Result(1)).
3.Call ToBoolean(Result(2)).
4.If Result(3) is true, return Result(2).
5.Evaluate LogicalANDExpression.
6.Call GetValue(Result(5)).
7.Return Result(6).
因此它评估每个操作数的布尔转换,但返回操作数的实际值.
如果您想知道Javascript如何将值转换为布尔值,请参阅第9.2 ToBoolean节