#javascript #function #if-statement
#javascript #функция #if-оператор
Вопрос:
Я продолжаю получать эту ошибку
«Не удается прочитать свойство «div» неопределенного»
Это мой код
function checkCard(){
for(let i = 0; i < 13; i ){
if(animalNums[i].animal.textContent === findArray[i].div.textContent){
animalNums[i].animal.style.display = "block"
animalNums[i].animal.classList.add("animate");
setTimeout(function(){animalNums[i].animal.classList.remove("animate");},1001)
score = 1
document.getElementById("scoreP").innerHTML = `Score: ${score}`
}
}
}
В нем говорится, что findArray[i].div не определен
, вот массив, на который он ссылается :
let findArray = [
{
div: document.getElementById("findOne")
},
{
div: document.getElementById("findTwo")
},
{
div: document.getElementById("findThree")
}
]
Я не уверен, почему это происходит, поскольку я считаю, что я выполнил очень похожую функцию, которая работала раньше. Это как-то связано с областью видимости?
Комментарии:
1. Можете ли вы консольно протоколировать массив внутри вашей функции?
2. Один вопрос… почему? Не могли бы вы сделать то же самое, используя то же имя класса и выполняя селектор в классе во время цикла по классу? Я думаю, что нет, потому что только от 0 до 2 «получают» в операторе
findArray[i].div.textContent
if, в то время как фактический цикл рассчитан на 0-12.
Ответ №1:
Наиболее вероятная причина, по которой это происходит, заключается в том, что вы выполняете итерацию по массиву со значением 'i'
, которое больше, чем сама длина массива. Вы используете значение i < 13
и увеличиваете «i». Возможно, ваш массив содержит менее 12 элементов, и когда вы пытаетесь получить значение по 12-му индексу, вы получаете «undefined», потому что в этом значении нет индекса 'i'
. Также здесь следует иметь в виду, что массивы основаны на 0.
Поскольку вы не поделились всем массивом, поэтому я не могу сказать наверняка, но вы можете просмотреть приведенный ниже фрагмент примера, чтобы понять, что я хочу сказать:
let findArray = [
{
div: document.getElementById("findOne"),
},
{
div: document.getElementById("findTwo"),
},
{
div: document.getElementById("findThree"),
},
];
(function checkCard() {
for (let i = 0; i < 4; i ) {
console.log(i, findArray[i].div);
}
})();
<div id="findOne"></div>
<div id="findTwo"></div>
<div id="findThree"></div>
Поэтому лучше сделать здесь, а не передавать жестко заданное значение i < 13
, это передать значение i
<
findArray.length
свойства to be, как показано ниже:
let findArray = [
{
div: document.getElementById("findOne"),
},
{
div: document.getElementById("findTwo"),
},
{
div: document.getElementById("findThree"),
},
];
(function checkCard() {
for (let i = 0; i < findArray.length; i ) {
console.log(i, findArray[i].div);
}
})();
<div id="findOne"></div>
<div id="findTwo"></div>
<div id="findThree"></div>
Ответ №2:
@sabbir.alam Да, я могу утешить.запишите массив внутри функции.
@ShaneerM13 Да, я не уверен, что это лучший способ написать это. Я больше хотел показать ошибку, которую я получаю, потому что это происходит с множеством разных функций.
Комментарии:
1. Какова длина вашего массива? Сколько в нем элементов?