繁体   English   中英

看起来像Python元组的奇怪的JavaScript语法

[英]Odd JavaScript Syntax that looks like a Python tuple

我正在与D3.js做一些工作,我正在调整其中一个内置映射投影的版本。 我正在查看源代码并找到下面的函数定义,它使用了我不熟悉的语法:

function albersUsa(coordinates) {
  var x = coordinates[0], y = coordinates[1];
  point = null;
  (lower48Point(x, y), point) || (alaskaPoint(x, y), point) || hawaiiPoint(x, y);
  return point;
}

具体来说,如何(lower48Point(x, y), point) || (alaskaPoint(x, y), point) || hawaiiPoint(x, y); (lower48Point(x, y), point) || (alaskaPoint(x, y), point) || hawaiiPoint(x, y); 评估?

如果您需要更多上下文,此示例出现在D3源代码的第3257行,可在此处找到: https//github.com/mbostock/d3/blob/master/d3.js

这是简写

lower48point(x, y);
if (!point) {
  alaskaPoint(x, y);
  if (!point) {
    hawaiiPoint(x, y);
  }
}

这三个函数必须改变相对全局变量“point”的值。 || version使用逗号运算符执行两个表达式并利用副作用。

就个人而言,我对编写该代码感觉不太好。

|| 在JavaScript中是后备运算符。 一个简单的例子是:

var a = true || 1; // evaluates to true
var a = false || 1; // evaluates to 1
var a = 'x' || 1; // evaluates to true

如果左侧评估为值,则结果是左侧,而右侧未评估。 您可以通过在括号中传入参数列表来进一步扩展它。 在这种情况下,如果左侧的每个项目评估为真实,则不会评估右侧。 正如您所看到的,您可以根据需要将这些语句链接在一起。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM