Передача по ссылке или по значению, spread оператор (es6-es9) 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Передача по ссылке или по значению, spread оператор (es6-es9)



Примитивные типы данных передаются по значению

let a = 5,

b = 1;

a = 10;

console.log(a); -> 10

{}, [], f(x) и другие не примитивные типы данных передают данные по ссылке

let obj = {

a: 1,

b: 10

};

let copy = obj; // в copy находиться не копия структуры и данных obj, а ссылка на

copy.a = 10; // obj и при изменении copy меняется и obj (типа ярлыка)

 

console.log(copy); -> { a: 10, b: 10 }                                 

console.log(obj); -> { a: 10, b: 10 }

Для копирования объектов используют:

1.Создаём цикл

function copy (mainObj) {

let objCopy = {};

 

let key; // переменную key можно создавать в не переберающей конструкции

for (key in mainObj) { //есть ключи внутри mainObj, который передаётся ф-и

objCopy[key] = mainObj[key]; // в objCopy создаю новоё свойство [key]

} // - это св-о будет содержать токое же обозначение как и в главном объекте

// и делаем копию из главного об-та

 

return objCopy;

}

 

const numbers = {

a: 2,

b: 5,

c: {

x: 7,

y: 4,

}

};

 

const newNumbers = copy (numbers);

 

newNumbers.a = 10;

console.log(newNumbers); -> { a: 10, b: 5, c: { x: 7, y: 4 } } – новые данные

console.log(numbers); -> { a: 2, b: 5, c: { x: 7, y: 4 } }

Если я попробую изменить в копированом объекте x, то получу, что

newNumbers.c.x = 10;

{ a: 10, b: 5, c: { x: 10, y: 4 } } – новый объект поменялось значение по

{ a: 2, b: 5, c: { x: 10, y: 4 } } - старый объект ссылке для newNumbers

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

2. Метод Object.assign (куда, откуда);

const numbers = {                                   

a: 2,

b: 5,

c: {

x: 7,

y: 4,

}

};                                              created new not dependent

                                                Surface cope {}

const add = {

d: 17,

e: 20

};

 

console.log(Object.assign(numbers, add)); >>{ a: 2, b: 5, c: { x: 7, y: 4 }, d: 17, e: 20 }

 

Можно создать копию объекта в пустой {}

 

console.log(Object.assign({}, add)); -> { d: 17, e: 20 }

3.Есть метод slice() для копии []

const oldArray = [1, 2, 3];

const newArray = oldArray.slice();

 

newArray[1] = "asasdaas";

 

console.log(oldArray); -> [ 1, 2, 3 ]

console.log(newArray); -> [ 1, 'asasdaas', 3 ]

 

4.Оператор разворота spred ES6(появился для [])/ES8(появился для {})

const video = ["youtube", "video", "rutube"],

blogs = ["wordpress", "livejurnal", "blogs"],

internet = [...video,...blogs, "vk", "facebook"];

console.log(internet);

 

-> internet [

'youtube',

'video',

'rutube',

'wordpress',

'livejurnal',

'blogs',

'vk',

'facebook'

]

Задача: есть функция и массив с тремя аргументами. Нужно передать аргументы из массива в ф-ю

function log (a, b, c) {

console.log(a); // link

console.log(b); // name

console.log(c); // comment

}

 

const num = ['link', 'name', 'comment'];

 

log (...num);

 

Fast copy []

const arr = ["a", "b"]

 

const newArr = [...arr];

 

 

For {}

const obj = {

name: "too",

mango: "fruit",

};

 

const newObj = {...obj};

 

console.log(newObj); -> { name: 'too', mango: 'fruit' }

 

Основы ООП, прототипно-ориентированное наследование

https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/Object/proto

https://javascript.info/prototype-methods

 

ООП – наука о правильной архитектуре

Динамическая типизация в JS

Динамическая типизация – возможность одного типа данных с течением времени превращаться в другой тип данных

// To String

 

//1) Самый старый и редкий способ преобразования

console.log(typeof(String(null))); -> string

console.log(typeof(String(4))); -> string

//2) Конкатинация - сложение строк || сложение строки с чем-то что-то

console.log(typeof(null + "")); -> string

//Былое применение до интерполяции

const num = 5;

console.log("vk.com/category/" + num); -> vk.com/category/5 //передача стиля через строку.приходить число, которое должно быть размером

const frontSize = 26 + "px";

// To Number

 

//1) Редкий мамонт

console.log(typeof(Number("rt"))); -> number

 

//2) Унарный +

console.log(typeof(+"5"));

 

//3) Methods of numbres можно превращать определённые струкруты в числа

console.log(typeof(parseInt(+"15px", 10 /*-дясятичная система*/)));

//неочевидное преобразование

console.log(typeof(+"5"));

 

//To Boolean

 

//1) 0, "", null, NaN - false, всё остальное - true.Нативное использование:

let switcher = null;

if (switcher) {

console.log(typeof("...Working"));

}

switcher = 1;

if (switcher) {

console.log(typeof("...Working"));

}

 

//2) Редкий мамонт

console.log(typeof(Boolean("rt")));

 

//3) Rare method for disposable/one-off script

console.log(typeof(!!"44444"));



Поделиться:


Последнее изменение этой страницы: 2021-07-18; просмотров: 90; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.188.175.182 (0.009 с.)