Javascript 弦是什么?它是从哪里来的?

Javascript 弦是什么?它是从哪里来的?,javascript,d3.js,Javascript,D3.js,在试图理解d3时,我看到了一行.text(String)。我不明白字符串应该是什么。我认为它可能是一个空字符串(nope),一个方法(我在api引用中没有看到),然后思考它可能是什么 我在下面对它进行了评论,并得到了预期的结果。我不明白的是什么是字符串以及它为什么工作。在这一行中,我的3个方形框有文本(它是稍后将表示的数据的内部值),而注释掉它并没有 Html 它看起来像是一个。根据Matt指出的: 若值是一个函数,那个么将为每个选定的元素(按顺序)计算该函数,并传递当前数据d和当前索引i,该

在试图理解d3时,我看到了一行
.text(String)。我不明白字符串应该是什么。我认为它可能是一个空字符串(nope),一个方法(我在api引用中没有看到),然后思考它可能是什么

我在下面对它进行了评论,并得到了预期的结果。我不明白的是什么是字符串以及它为什么工作。在这一行中,我的3个方形框有文本(它是稍后将表示的数据的内部值),而注释掉它并没有

Html

它看起来像是一个。根据Matt指出的:

若值是一个函数,那个么将为每个选定的元素(按顺序)计算该函数,并传递当前数据
d
和当前索引
i
,该上下文作为当前DOM元素。然后使用函数的返回值设置每个元素的文本内容


因此,您在前面几行将
g.data
设置为
[50150250]
。每个数字由
String
构造函数转换为String对象,返回并用作DOM节点的文本值。

看起来d3接受一个以数据为参数的函数:。在这里,数据通过
string
@pimvdb转换成字符串:我仍然不知道它应该是什么。这是一个全局函数吗?变量?另外,您的链接实际上没有使用
String
…是的,
String
是一个全局函数,它以字符串形式返回第一个参数。我认为这是有意义的。。。“如果值是一个函数,则对每个选定元素(按顺序)计算该函数,并传递当前数据d…”调用
String(datum)
将强制将其转换为字符串,文本将设置为字符串。@Matt这仍然没有帮助。我在传递字符串,这不像我在写&String(c++)或
out String
(c#)。@user1955298:它确实有帮助。我们没有
&
作为JavaScript中的引用操作符或任何
out
垃圾;我们只是直接传递对象。@Matt:我给自己取了个名字,这样你就可以更好地@me了。我还是不明白。我不是在未定义的情况下通过吗?IIRC更改传递到函数中的变量不会在函数外部更改它。但是,更改对象成员是不同的,因为它不是实际的变量itself@BruteCode:因此,传递此函数告诉d3(根据bfavaretto在其答案中包含的规范),将每个元素的
textContent
属性设置为调用
String()
,将数据作为参数传递的结果。将数字传递给
String()
将以字符串形式返回该数字,这就是您看到的
textContent
<div class='chart' id='chart-10'/>
<script src="http://d3js.org/d3.v3.min.js"></script>
    var w = 360;
    var h = 180;
  var svg = d3.select("#chart-10").append("svg")
      .attr("width", w)
      .attr("height", h);

  var g = svg.selectAll(".data")
      .data([50,150,250])
    .enter().append("g")
      .attr("class", "data")
      .attr("transform", function(d, i) { return "translate(" + 20 * (i + 1) + ",20)"; });

  g.append("circle")
      .attr("class", "little")
      .attr("r", 1e-6);

  g.append("rect")
      .attr("x", -10)
      .attr("y", -10)
      .attr("width", 20)
      .attr("height", 20)
      .style("fill", "lightgreen")
      .style("stroke", "green");

  g.append("text")
      .attr("dy", ".35em")
      .attr("text-anchor", "middle")
;//      .text(String);


    g.attr("transform", function(d, i) { return "translate(" + 20 * (i + 1) + ",20)"; });
    g.select("rect").style("opacity", 1);
    g.select("circle").attr("r", 1e-6);

    var t = g.transition().duration(750);
    t.attr("transform", function(d, i) { return "translate(" + d + ",90)"; });
    t.select("circle").attr("r", Math.sqrt);
    t.select("rect").style("opacity", 1e-6);