Javascript 为什么d3 exit()长度高于预期?

Javascript 为什么d3 exit()长度高于预期?,javascript,d3.js,Javascript,D3.js,我在一个虚拟页面的主体上添加了两个“p”标记,如下所示: <!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <script src="https://cdnjs.cloudflare.com/ajax/libs/d3/3.4.4/d3.min.js"></script>

我在一个虚拟页面的主体上添加了两个“p”标记,如下所示:

<!doctype html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Document</title>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/d3/3.4.4/d3.min.js"></script>
</head>
<body>

  <h1>Hello world</h1>
  <p></p>
  <p></p>
</body>
</html>
d3然后返回以下内容(从Chrome开发工具控制台复制):

我在这个数组中没有看到第0个元素,但我确实看到了第1个元素(“p”标记,没有数据绑定到它)。d3告诉我这个数组的长度是2,那么第0个元素是什么,为什么不显示在这里


相切问题-我对exit()函数的理解是,它返回选择中未绑定到任何数据的元素。那么,为什么这个数组的长度是2(听起来好像它同时代表绑定和未绑定的“p”标记),而不是1(只是没有数据绑定的“p”标记)?

退出选择是从整个选择中派生出来的,在您的例子中,它包含两个元素。这里重要的一点是选择——它不是数组。在许多方面,它的行为类似于数组,您可以使用它做很多事情,也可以使用数组,但这些函数依赖于自定义实现来处理选择

因此,基本上,您从调试器获得的输出在这里有点误导。它是一个具有数组某些属性的对象(这是Chrome用来显示它的),但它不是真正的数组

最终重要的是,正确的元素最终会出现在正确的地方,正如您所观察到的,情况就是这样

d3.selectAll('p').data([1]).exit();
[ Array[2]             
1: p
length: 2
parentNode: html
__proto__: Array[0]
]