Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Почему не сработал for in? (https://javascript.ru/forum/misc/82535-pochemu-ne-srabotal.html)

slark 21.05.2021 10:52

Почему не сработал for in?
 
Добрый день, создал функцию вызывающую модальное окно при нажатии по кнопке.

Решил для этого же сделать второю кнопку и чтобы не повторять код, в цикле кнопкам назначил событие вызывающее модальное окно:

const btnCalls = document.querySelectorAll('.btn')

for (let i = 0; i < btnCalls.length; i++) {
    btnCalls[i].addEventListener('click', function() {
        const a = 'Привет'
        const b = 'МИР!'

        console.log(`${a} ${b}`)
    })
}


Вопрос, почему через обычный цикл работает, а через for in не работает:

const btnCalls = document.querySelectorAll('.btn')

for (let btnCall in btnCalls) {
    btnCall.addEventListener('click', function() {
        const a = 'Привет'
        const b = 'МИР!'

        console.log(`${a} ${b}`)
    })
}

рони 21.05.2021 11:00

slark,
вам не in нужен а of

ksa 21.05.2021 11:46

Цитата:

Сообщение от slark
почему через обычный цикл работает, а через for in не работает

Ответ, как всегда, в букваре... ;)
Цитата:

Для перебора всех свойств из объекта используется цикл по свойствам for..in. Эта синтаксическая конструкция отличается от рассмотренного ранее цикла for( ; ; ).
https://learn.javascript.ru/object-for-in

Т.е. это разные циклы и они таки различаются, потому и разные результаты. :)

А "не работает" он у тебя потому, что ты не понимаешь что получаешь в том цикле.
Но он таки всегда работает как нужно

<div></div>
<script>
const a = document.querySelectorAll('div')

for (let k in a) {
	alert(k)
}
</script>

ksa 21.05.2021 11:48

Цитата:

Сообщение от рони
вам не in нужен а of

Потом выяснится что и тот цикл "не всегда работает"... :)


Часовой пояс GMT +3, время: 23:42.