2017-05-02 21 views
0

我是新來的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

回答

3

這與變量的作用域和回調做。

您正在爲d3.csv函數的回調分配data = d。因爲您正在定義數據,所以在函數運行後,可以在控制檯中查看數據。

但是,在您的代碼中,您正試圖在回調執行之前訪問數據的length屬性,此時已聲明data但未分配值,因此length是undefined變量的屬性。

如果您想在代碼中訪問data.length,您需要在回調函數中執行此操作,否則將返回回調中的承諾。

var data; 

d3.csv("../Data/crime_2016.csv", function(d){ 
    data = d; 
    var length = data.length; 
}); 
相關問題