开发者问题收集

JavaScript 中无法读取未定义数组错误的属性长度?

2018-03-29
1819

我使用下面的代码获取 3 个 div 使用的颜色列表。如果此 div 已设置颜色,则应将其推送到数组 checkColors 中。

var checkColors = [];

$("div[style]").each(function(){
    getColor = $(this).css("color");
    if(getColor){
        checkColors.push(getColor);
    }
});

if(checkColors){
    checkColors = shuffleArray(checkColors);
    if(checkColors.length > 0){
        if(checkColors[0]){
            backgroundColor = checkColors[0];
        }
        if(checkColors[1]){
            primaryColor = checkColors[1];
        }
        if(checkColors[2]){
            secondaryColor = checkColors[2];
        }
    }  
}

但是, if(checkColors.length > 0){ 给出了 Uncaught TypeError: Cannot read property 'length' of undefined 错误,我不明白为什么,因为我有一个 If 语句来检查数组是否未定义。

以下是 shuffleArray() 函数:

    function shuffleArray(array) {
        for (var i = array.length - 1; i > 0; i--) {
            var j = Math.floor(Math.random() * (i + 1));
            var temp = array[i];
            array[i] = array[j];
            array[j] = temp;
        }
    }
2个回答

我猜

 shuffleArray(checkColors)

会改变数组,而不是返回一个新数组。因此

 checkColors = shuffleArray(checkColors)

会将 shuffleArray 设置为未定义。

Jonas Wilms
2018-03-29

您已在操作 shuffleArray 内的数组,请勿再次将其分配给 checkColors。

以下代码更改应该有效 -

// checkColors = shuffleArray(checkColors);
// replace above line with
shuffleArray(checkColors);

否则,如果您将其分配给 checkColors,则需要从 shuffleArray 返回一个数组。

function shuffleArray(array) {
   // your code
   // after for loop
   return array;
}
Rushikesh Bharad
2018-03-31