Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 21.05.2021, 10:52
Аватар для slark
Новичок на форуме
Отправить личное сообщение для slark Посмотреть профиль Найти все сообщения от slark
 
Регистрация: 05.05.2021
Сообщений: 8

Почему не сработал 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}`)
    })
}
Ответить с цитированием
  #2 (permalink)  
Старый 21.05.2021, 11:00
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,126

slark,
вам не in нужен а of
Ответить с цитированием
  #3 (permalink)  
Старый 21.05.2021, 11:46
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,228

Сообщение от 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>
Ответить с цитированием
  #4 (permalink)  
Старый 21.05.2021, 11:48
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,228

Сообщение от рони
вам не in нужен а of
Потом выяснится что и тот цикл "не всегда работает"...
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Почему некоторые операторы возвращают значения, а не ссылки? dump Общие вопросы Javascript 15 25.07.2012 17:28
Регулярные выражения. Почему находи именно так? jsuse Общие вопросы Javascript 4 21.11.2011 16:37
Свойства объекта, методы и this. Почему свойство вызывается с () ? jsuse Общие вопросы Javascript 2 04.11.2011 20:39
Prototype. Одноблочное определение псевдокласса. Литеральная форма не робит. Почему? GuardCat Общие вопросы Javascript 6 03.10.2011 13:46
Почему это работает? (инклуд JS в JS) Василий Б. Общие вопросы Javascript 4 11.06.2010 12:41