使用双&符“&&”进行分配

时间:2012-10-14 01:43:40

标签: javascript

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

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

双安瓿如何在这种情况下起作用?它不只是将“true”分配给ctx变量吗?

2 个答案:

答案 0 :(得分:57)

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

它的工作原理如下(来自developer.mozilla.com):

  

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

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

4 && 5返回5,不是真的。

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

答案 1 :(得分:22)

如果canvas.getContext('2d')实际上是一个函数,它会将ctx的返回值分配给canvas.getContext

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