Почему массив не изменяется через цикл for..of?

Здравствуйте, скажите пожалуйста почему не изменяется массив через цикл for..of?

let a = [1, 2, 3];
for (let num of a) {
  num += 1;
}


Через обычный цикл for, работает а через for of не работает почему так?
  • Вопрос задан
  • 294 просмотра
Решения вопроса 1
sergiks
@sergiks Куратор тега JavaScript
♬♬
Не меняется, потому, что в JS примитивные типы (число, строка) передаются «по значению». Внутри цикла оказывается копия значения, никак не связанная с оригиналом. Поменять это значение в цикле — оно не изменяется в источнике.

Другое дело объекты – они передаются «по ссылке», и их содержание можно менять:
let a = [{v: 1}, {v: 2}, {v: 3}];
for (let obj of a) {
  obj.v += 1;
}
a // [{"v":2},{"v":3},{"v":4}]

Подробнее про Копирование объектов и ссылки
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@BATPYIIIKOB
PHP, JS
Цикл for..of не предоставляет доступа к номеру текущего элемента, только к его значению
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы