我一直在寻找的源代码raphael.js,我看到了很多的东西一样!variable && function()(如:!svg.bottom && (svg.bottom = this);)
这究竟是做什么的?它是先检查还是只在不是真的时才执行?
正确.这是(ab)使用短路评估.布尔表达式仅在确定结果所需的范围内执行.在您的示例中,如果svg.bottom为非null,则!svg.bottomis false,并且结果为&&is false,因此右侧的执行不会发生.它基本上相当于if(!svg.bottom)svg.bottom = this;
当您进行布尔运算时,编译器开始逐一检查每个条件,并在确定结果时停止 - 例如,如果您询问
if(a && b && c)
{
}
Run Code Online (Sandbox Code Playgroud)
如果一个是假的,那么完整的布尔问题是假的,和编译器并不需要检查b和c。此编译器功能用于在某些情况下缩短编写代码。
这是(对我而言)编写代码的坏习惯。
!variable && function()
Run Code Online (Sandbox Code Playgroud)
代替
if(!variable) function();
Run Code Online (Sandbox Code Playgroud)
尝试最小化 javascript 的大小?
难以调试,并且在许多情况下很难找到实际剂量。
看到这个类似的代码。
unsigned uCycleCheckBox(unisgned uCur)
{
return ((uCur <= 1) ? (uCur?0:1) : (uCur==4)?2:(uCur+1));
}
Run Code Online (Sandbox Code Playgroud)
也是一样的想法......难以理解,难以调试,难以更改和在出现问题时修复。
对于这方面的评论,我建议阅读《编写可靠代码》和《调试开发过程》这本书。
编写可靠的代码比其他任何事情都重要。
仅当第一部分(!svg.bottom)不为假时,它才使用短路规则来执行表达式的第二部分(实际上包括赋值).那就是svg.bottom是null- 设置为this.
| 归档时间: |
|
| 查看次数: |
4997 次 |
| 最近记录: |