javascript - 两个矫揉造作和一个 if 条件测试

标签 javascript d3.js

我正在研究 Mike Bokstok (d3js) 的高度优化的 voronoi 实现代码。

我不明白当前的测试:

if (!(m = (halfedges = cell.halfedges).length)) return;

请在此处查看代码:https://github.com/d3/d3-voronoi/blob/master/src/Diagram.js#L87

  1. halfedges 和 m 是后一行定义的变量!它是如何工作的?
  2. 测试的目的是什么?如果有人使用错误类型的单元格调用函数(没有数组类型的 halfedges 属性),它是否是防御性测试?

最佳答案

因为var hoisting , var 可以放在函数中的任何位置,但将首先在其范围内处理:

bla = 2;
var bla;

// is implicitly understood as:
var bla;
bla = 2;

请注意,它使用的是 =,而不是 ==。它不是对 mhalfedges 的测试,它是两个矫饰和对 cell.halfedges.length 的测试。

可以改写为

if (!cell.halfedges.length) return;
halfedges = cell.halfedges;
m = halfedges.length;

关于javascript - 两个矫揉造作和一个 if 条件测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43931798/

相关文章:

javascript - 书架注册表插件和 Node 循环依赖错误

php - javascript 函数在 php echo 中工作吗?

javascript - Ajax 文件上传 - 服务器端错误

javascript - React 状态数组添加值

javascript - Angular/ ionic : how can I refresh a directive when I update variables in the controller?

javascript - 在 D3 和弦图中使用工具提示获取值 - 错误 : "property of target undefined"

javascript - D3 : Data join for population pyramid

javascript - 单击 d3 中的 svg 文本在鼠标位置上打开 div

javascript - d3.js 没有从 PHP 文件读取我的 JSON 数据

javascript - 单击 D3.js 中的特定节点时访问 JSON 中的值