javascript-加号在这里有什么用?

我有一个简单的JavaScript语法问题.
我在下面有此链接,它有一个使用d3.js渲染条形图的代码段.

https://plnkr.co/edit/HQz1BL9SECFIsQ5bG8qb?p=preview

我不明白的是

从script.js文件中,有一条语句,

 data.forEach(function(d) {
    d.date = parseDate(d.date);
    d.value = +d.value;
});

如果您只删除像这样的加号d.value,

  data.forEach(function(d) {
    d.date = parseDate(d.date);
    d.value = d.value;
});

如您所见,y轴上的刻度值发生了变化..但据我所知,在值之前添加意味着将任何值转换为数字类型.

并且,如果您查看bar-data.csv文件中的数据,则所有值均包含数字,因此我认为无论是否删除该值,都没有任何改变.

解决方法:

“ …如果您查看bar-data.csv文件中的数据,则所有值均包含数字” …不,实际上,加载/解析文件后,它们不是数字:它们是字符串.

发生的是使用dsv.parse的d3.csv将所有字段加载为字符串.您可以在API中看到:

If a row conversion function is not specified, field values are strings. For safety, there is no automatic conversion to numbers, dates, or other types. (emphasis mine)

我们可以很容易地证明这一点.假设我们有这个CSV,以数字作为值:

foo,bar
17,34
42,12

由于堆栈代码段不允许我们保存CSV文件,因此我将在此处使用d3.csvParse而不是d3.csv,但结果是相同的.看一下控制台:

var csv = `foo,bar
17,34
42,12`;

var data = d3.csvParse(csv);

data.forEach(function(d) {
  for (key in d) {
    console.log(d[key] + ": " + typeof d[key])
  }
})
<script src="https://d3js.org/d3.v5.min.js"></script>

现在,让我们使用一元加号仅转换foo列中的值:

var csv = `foo,bar
17,34
42,12`;

var data = d3.csvParse(csv, row);

data.forEach(function(d) {
  for (key in d) {
    console.log(d[key] + ": " + typeof d[key])
  }
})

function row(d) {
  d.foo = +d.foo;
  return d;
}
<script src="https://d3js.org/d3.v5.min.js"></script>

PS:只是为了解释如果删除一元加号,插拔器的行为:CSV中的较高数字是478,用于轴的域.但是,除去一元加号后,较高的值将变为“ 53”,它作为字符串大于“ 478”:

console.log("53" > "478")
上一篇:从一个小例子可以看出rust不行


下一篇:PHP Parse错误:语法错误,使用IF替代语法的文件意外结束