При получении значений от объекта unshift () изменяет исходный объект? - PullRequest
1 голос
/ 23 апреля 2020

Этот вопрос возник, когда я устанавливал базовый регистр следующего кода:

function withoutReverse(str, arrayFor = []){
    arrayFor.unshift(str[0]);
    if (str.length === 1) 
    return arrayFor.join("");
    else return withoutReverse(str.slice(1), arrayFor)  }

  let hola = "hello";  
  withoutReverse(hola);//-->olleh

Я думал, что база должна быть str.length === 0, потому что я предполагал, что unshift буквально брал каждый элемент из источника объект, чтобы положить его в arrayFor. Затем я понял, что это то, для чего я использовал slice.

Я не нашел убедительной информации в MDN. Я прав? unshift() на самом деле не принимает эти значения (при хранении в объекте)? если так, как это обрабатывается в памяти?

Спасибо

1 Ответ

0 голосов
/ 23 апреля 2020

Когда вы дойдете до 5-го вызова:

console.log(str) // "o"
arrayFor.unshift(str[0]); // str[0] === "o" 
console.log(str.length) // "1" because accessing the property here does not change it.

Поэтому ваше условие выхода теперь истинно.

Для функций в JS:

  • числа / строки / логические значения передаются как значения
  • массивы / объекты передаются как ссылки

Дополнительная информация о строках:

В отличие от некоторых языков программирования (например, C), строки JavaScript являются неизменяемыми. Это означает, что после создания строки ее невозможно изменить.

Источник MDN

return 'cat' [1] // возвращает «a»

При использовании скобок для доступа к символам попытка удалить или присвоить значение этим свойствам не будет успешной. Используемые свойства не являются ни записываемыми, ни настраиваемыми. (См. Object.defineProperty () для получения дополнительной информации.)

Источник MDN

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...