Рубрики
Без рубрики

Как получить рукоятку на ссылке VS Значение в JavaScript

Мариной Ferreira Как получить рукоятку на ссылке VS Значение в JavaScriptSithis Статья обсуждает, как различные типы данных JavaScript ведут себя, когда они присваиваются переменной. В зависимости от типа данных память выделяется по-разному для его хранения. Это может зарезервировать новое место для хранения

Автор оригинала: FreeCodeCamp Community Member.

Марина Феррейра

В этой статье обсуждается, как различные типы данных JavaScript ведут себя, когда они присваиваются переменной. В зависимости от типа данных память выделяется по-разному для его хранения. Он может зарезервировать новое пространство для хранения копии значения, или она может не создавать копию вообще и просто указывать на существующее значение (ссылка).

Вот мои заметки, сделанные, следуя за JavaScript 30 Курс WES BOS Отказ

Числа, строки и логические

В JavaScript, примитивные типы, такие как undefined , null , строка , Номер , логический и Символ передаются по значению.

let name = 'Marina';let name2 = name;
console.log({name, name2}); >> { name: 'Marina', name2: 'Marina' }
name = 'Vinicius';
console.log({name, name2});>> { name: 'Vinicius', name2: 'Marina' }

Когда переменная Имя назначается пространство в памяти с адресом 0x001 зарезервировано для хранения этого значения. Переменная Имя затем указывает на этот адрес. Переменная Имя2 затем установлен на равную Имя Отказ Новое пространство в памяти, с новым адресом 0x002 выделяется и хранит копию значения, хранящегося в адресе Имя указывает на.

Итак, когда мы хотим изменить значение Имя , значение, хранящееся Имя2 Не будет изменен, так как его копия, сохраненная в другом месте.

Объекты и массивы

Объекты в JavaScript передаются посредством ссылки. Когда установлено более одной переменной для хранения либо объект , массив или Функция Эти переменные указывают на то же самое выделенное пространство в памяти.

const animals = ['Cat', 'Dog', 'Horse', 'Snake'];
let animals2 = animals;console.log({animals, animals2});>>{  animals: ['Cat', 'Dog', 'Horse', 'Snake'],  animals2: ['Cat', 'Dog', 'Horse', 'Snake']}
animals2[3] = 'Wale';console.log(animals, animals2);>>{  animals: ['Cat', 'Dog', 'Horse', 'Wale'],  animals2: ['Cat', 'Dog', 'Horse', 'Wale']}

Когда животные Установлено для хранения массива, память выделена, а адрес связан с этой переменной. Тогда животные2 установлен на равную животные Отказ С животные хранит массив вместо создания копии этого массива и нового адреса в памяти, животные2 просто указан на тот же объект в существующем адресе. Таким образом, любые изменения в животные2 будет отражаться на животные потому что они указывают на одно и то же место.

Вы увидите то же поведение для объектов:

const person = {  name: 'Marina',  age: 29};
let femme = person;femme.age = 18;
console.log({person, femme});>>{  person: { name: 'Marina', age: 18 },  femme: { name: 'Marina', age: 18 }}

Копирование объектов и массивов

Поскольку простое задание недостаточно для получения копии объекта, которые могут быть достигнуты другими подходами:

Массива

кусочек()

let animals2 = animals.slice();animals2[3] = 'Shark';

CONCAT ()

let animals3 = [].concat(animals);animals3[3] = 'Tiger';

Распространение (ES6)

let animals4 = [...animals];animals4[3] = 'Lion';

Изменения будут влиять только на изменение объекта:

console.log({animals, animals2, animals3, animals4});>>{  animals: ['Cat', 'Dog', 'Horse', 'Snake'],  animals2: ['Cat', 'Dog', 'Horse', 'Shark'],  animals3: ['Cat', 'Dog', 'Horse', 'Tiger'],  animals4: ['Cat', 'Dog', 'Horse', 'Lion']}

Объекты

назначать()

let human = Object.assign({}, person, { age: 20 });
console.log(person, human);>>{  person: { name: 'Marina', age: 29 },  human: { name: 'Marina', age: 20 }}

Глубокий клон

Важно отметить, что эти методы – это всего лишь один уровень. Для глубоких клонов есть нахмуренный метод. Используйте тщательно.

let femme3 = JSON.parse(JSON.stringify(person));femme3.name = 'Leslie';
console.log(person, femme3);>>{  person: { name: 'Marina', age: 29 },  femme3: { name: 'Leslie', age: 29 }}

использованная литература

  • WESBOS – JavaScript 30.
  • Вы не знаете JS: Область и замыкания Кайл Симпсон

Первоначально опубликовано marina-ferreira.github.io .