带有双与号“&&”的赋值

IT技术 javascript
2021-03-01 13:27:31

我刚刚看到有人使用这段代码:

ctx = canvas.getContext && canvas.getContext('2d');

双与号在这种情况下如何工作?它不会只是将“true”分配给 ctx 变量吗?

2个回答

这是在调用函数之前确保函数存在的常用方法。

它是这样工作的(来自developer.mozilla.com):

expr1 && expr2expr1如果可以转换为false,则返回否则,返回expr2因此,当与布尔值一起使用时,如果两个操作数都为,则&&返回否则,返回truetruefalse

换句话说,除非必须,Javascript 不会将操作数强制为布尔值。

4 && 5 返回 5,不为真。

在您的情况下,如果第一个表达式是undefined(可转换为 false),ctx则将为 false,并且不会对第二个表达式进行评估。如果第一个表达式是一个函数(不能转换为false),那么 Javascript 会计算第二个表达式,并将它的值赋给ctx变量。

这里还有一个小吹毛求疵:第一个表达式将是undefined而不是nullifcanvas没有.getContext定义。
2021-04-19 13:27:31
@AndyHin 我来晚了,但既然你提到了礼仪:你做对了。如果您认为这是最佳答案,那么您应该接受它,即使它不是第一个正确答案。重点是标记对您最有帮助并且最有可能帮助其他人访问该站点的答案。我首先得到答案的事实并没有真正考虑到它。第一个答案对需要帮助的人没有帮助。最好的答案是!
2021-04-20 13:27:31
你和@Trott 的回答是正确的。虽然他是先发帖的,但我觉得这个帖子对实际发生的事情给出了更清晰的解释。不知道正确的礼仪是什么。
2021-05-01 13:27:31
只是好奇,但如果我们确实想要一个布尔结果怎么办?而不是返回第一个真实表达式的结果。
2021-05-04 13:27:31
您可以使用布尔对象来强制表达式的结果,即Boolean(4 && 5) -> trueBoolean(undefined && 5) -> false
2021-05-14 13:27:31

它将分配canvas.getContext('2d')ctxifcanvas.getContext实际上是一个函数的返回值

左边的部分只是为了避免错误。它确保在尝试调用之前canvas具有getContext属性getContext()这样,canvas.getContext()如果函数不存在,代码就不会调用如果它没有先检查并在函数不存在时调用,则会将错误记录到控制台并停止执行。