我刚刚看到有人使用这段代码:
ctx = canvas.getContext && canvas.getContext('2d');
双&符号在这种情况下如何工作?它不只是将“true”分配给 ctx 变量吗?
我刚刚看到有人使用这段代码:
ctx = canvas.getContext && canvas.getContext('2d');
双&符号在这种情况下如何工作?它不只是将“true”分配给 ctx 变量吗?
这是在调用函数之前确保函数存在的常用方法。
它是这样工作的(来自developer.mozilla.com):
expr1 && expr2
返回expr1
是否可以转换为false
; 否则,返回expr2
。因此,当与布尔值一起使用时,如果两个操作数都是;则&&
返回。否则,返回。true
true
false
换句话说,除非必须,否则 Javascript 不会将操作数强制为布尔值。
4 && 5
返回 5,不正确。
在您的情况下,如果第一个表达式是undefined
(可转换为 false),那么ctx
将为 false,并且第二个表达式不会被评估。如果第一个表达式是一个函数(不能转换为false
),那么 Javascript 会计算第二个表达式,并将它的值赋给ctx
变量。
如果实际上是一个函数,它将分配canvas.getContext('2d')
to的返回值。ctx
canvas.getContext
左边的部分只是为了避免错误。它确保在尝试调用之前canvas
具有属性。这样,如果函数不存在,代码将不会调用。如果它没有先检查并在函数不存在时调用,则会将错误记录到控制台并停止执行。getContext
getContext()
canvas.getContext()