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