使用双&符"&&"进行分配

And*_*Hin 38 javascript

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

ctx = canvas.getContext && canvas.getContext('2d');
Run Code Online (Sandbox Code Playgroud)

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

Set*_*eth 59

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

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

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

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

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

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

  • @AndyHin我在这里已经很晚了,但既然你提到了礼节:你做对了.如果你认为这是最好的答案,那么你应该接受它,即使它不是第一个正确的答案.重点是标记最能帮助您的答案,并最有可能帮助其他人访问该网站.事实上,我首先得到了我的答案并没有真正考虑到它.第一个答案并没有帮助需要帮助的人.最好的答案呢! (6认同)

Tro*_*ott 24

它将分配的返回值canvas.getContext('2d'),以ctx是否canvas.getContext实际上是一个功能.

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