无法读取未定义的属性“长度”,但仍可在控制台

时间:2017-05-02 17:50:10

标签: html d3.js

我是html的新手,我正在尝试将变量data设置为包含csv文件行的对象数组。当我运行我的代码并检查页面时,控制台说“无法读取未定义的属性'长度'。”但是,当我在控制台中键入data.length时,它会打印18411(我的csv文件中的行数)。当我能在控制台中清楚地打印出长度时,为什么还会出现此错误?

<html>
<head>
  <meta charset="UTF-8">
  <title>Untitled Document</title>
  <script src="http://d3js.org/d3.v3.min.js"></script>
  <script type = "text/javascript">
    var data;

    d3.csv("../Data/crime_2016.csv", function(d){
        data = d;
    });

    var length = data.length;

  </script>
</head>
<body>



</body>
</html>

enter image description here

2 个答案:

答案 0 :(得分:3)

这与变量范围和回调有关。

您在d3.csv函数的回调中分配data = d。因为您正在定义函数数据之外的数据,所以在函数运行后可以在控制台中查看数据。

但是,在您的代码中,您尝试在回调执行之前访问数据的length属性,此时已声明data但未赋值给它,因此length是{{1的属性变量。

如果您想访问代码中的undefined,则需要在回调函数中执行此操作,否则将从回调中返回承诺。

data.length

答案 1 :(得分:-1)

您可以使用以下代码:

{{data?.length}}