Итак, на предыдущем уроке мы познакомились с примитивными типами данных. Сегодня мы будем изучать тип данных Referral. Итак, начнем.
Тип реферальных данных:
- Этот тип переменной не хранит значение, а хранит ссылку.
- Движок JS выделяет память в куче для этого типа переменной.
- Этот тип данных также называется непримитивным, вторичным или изменяемым типом данных.
- Все типы реферальных данных изменяемы. Это означает, что если мы изменим копию реальной переменной, то это изменение можно будет увидеть в исходном объекте.
JavaScript имеет 3 типа реферальных данных:
1. Массив
2. Объект
3. Дата
Множество
1. Объект
Array
, как и массивы в других языках программирования, позволяет сохранять набор из нескольких элементов под одним именем переменной и имеет элементы для выполнения общих операций с массивами.
2. Массив хранит непрерывно.
Массив можно использовать как:
var arr = [1,2,3,4] console.log(arr); console.log(typeof arr); //Output >(4) [1, 2, 3, 4] >object
typeof arr показывает объект. Вы можете понять это как льва в животном. Означает, что лев есть лев, а лев — это что? Лев - животное. так же, как arr является массивом, а также объектом.
3. Массив индексируется. Данные можно получить через index.
var arr = [1,2,3,4]; console.log(arr[0]); console.log(arr[1]); //Output >1 >2
4. Массив изменяем.
var arr = [1,2,3]; var arr2 = arr; console.log(arr==arr2);//true console.log(arr===arr2);//true arr2[0]=10; console.log(arr); console.log(arr2); //Output >true >true >(3) [10, 2, 3] >(3) [10, 2, 3]
Итак, здесь arr содержит адрес объекта, который является массивом. Пока мы копируем arr в новую переменную с именем arr2, копируется ссылка, которая представляет собой значение, содержащееся в arr. Таким образом, arr и arr2 указывают на один и тот же массив, поэтому, если мы внесем изменения в arr2, это изменение будет отражено в arr.
5. Чтобы добиться изменчивости в объектном или ссылочном типе данных, мы должны скопировать данные из адреса, хранящегося в переменной, которую мы хотим скопировать, поэтому по этой причине мы используем оператор расширения.
var arr3 = [...arr]; // "..." is called spread operator arr2[0]=10; console.log(arr); console.log(arr2); arr3[0]=100; console.log(arr3); console.log(arr==arr3); console.log(arr===arr3); //Output >(3) [10, 2, 3] >(3) [10, 2, 3] >(3) [100, 2, 3] >false >false
Оператор Spread распространяет массив arr в новый массив, адрес которого хранится в arr3.
Когда мы теряем, сравниваем arr и arr2, которые указывают на один и тот же массив, поэтому мы получаем true, потому что они оба имеют одинаковую ссылку
когда мы используем строгое сравнение между arr и arr2, мы также получаем true, потому что тип и значение одинаковы.
Пока мы используем оператор спреда и создаем новый массив с именем arr3, и используем свободное или строгое сравнение, мы получаем false, потому что значения теперь другие.
Объект
1. объект представляет собой пару ключ-значение
2. Объект можно использовать как:
var o = {}; console.log(typeof o); //Output >object
3. Мы можем найти значение через ключ объекта. Каждый ключ уникален в объекте. в то время как значение может быть одинаковым или другим
var temp = {delhi:11,hyd:12} console.log(temp.delhi); console.log(temp["delhi"]); console.log(temp.hyd); console.log(temp["hyd"]); //Output >11 >11 >12 >12
4. Мы можем получить доступ к значению через два синтаксиса с квадратной ([]) скобкой и оператором точки (.), как мы видели в примере выше.
В . Итак, возникает вопрос. В чем разница между оператором точки (.) и квадратной скобкой ([])?
Таким образом, основное отличие заключается в том, что вы не можете получить доступ к тем клавишам, которые являются числами или строками, содержащими специальные символы, такие как пробелы.
через квадратные скобки вы можете получить доступ только к строковым клавишам, в которых нет пробелов.
var ahmad = {name:"Mohd Ahmad",study:"Btech",12:65,"perm add":"Delhi"}; console.log (ahmad.name); console.log(ahmad["name"]); // console.log(ahmad.12); through error console.log(ahmad[12]); // console.log(ahmad.perm add); through error console.log(ahmad["perm add"]); //Output >Mohd Ahmad >65 >Delhi
Петли
Циклы могут выполнять блок кода несколько раз. Циклы удобны, если вы хотите запускать один и тот же код снова и снова, каждый раз с другим значением.
Циклы можно использовать как:
var arr = [1,2,3,4]; for(var i=0;i<arr.length;i++){ console.log(arr[i]); } //Output >1 >2 >3 >4
JavaScript поддерживает различные типы циклов:
1. for
2. for of
3. for in
4. while
5. do-while
Мы уже видели цикл.
Для/из цикла
for/of может перебирать массив. цикл for не может перебирать объект.
var arr = [1,2,3,4]; for(var element of arr){ console.log(arr[i]); } //Output >1 >2 >3 >4 var ahmad = {name:"Mohd Ahmad",study:"Btech",12:65,"perm add":"Delhi"}; for (var key of ahmad){ console.log(key,ahmad[key]) } //Output >Uncaught TypeError: ahmad is not iterable at <anonymous>:2:17
Итак, здесь мы увидели, что не можем перебирать объект через цикл for/of.
Для/в цикле
Цикл for in используется для обхода пары ключ-значение, поэтому он также может выполнять итерацию по массиву, где ключ является индексом.
var arr = [1,2,3,4]; for (let key in arr){ console.log(arr[key]); } //Output >1 >2 >3 >4 var ahmad = {name:"Mohd Ahmad",study:"Btech",12:65,"perm add":"Delhi"}; for (var key in ahmad){ console.log(key,ahmad[key]); } //Output >12 65 >name Mohd Ahmad >study Btech >perm add Delhi
Важная заметка
typeof — это оператор, но интервьюер может попытаться убедить вас, что type of — это функция, он покажет вам это:
var a =10; console.log(typeof (a)) //Output >number
И он скажет, что typeof — это функция, потому что мы вызываем typeof с фигурными скобками, как мы вызываем функции, но тогда вы можете показать ему это:
var a =10; console.log(typeof ((((a))))) //Output >number
И можем спросить его, можем ли мы вызвать такую функцию с несколькими скобками.
Ответ: typeof — это оператор, а скобки можно использовать для приоритизации чего-то, например, в уравнении.
На сегодня все, увидимся на следующем уроке.
Я хотел бы выразить благодарность Амиту Сриваставе, сэру Brain Mentors Pvt Ltd, за проведение таких полезных сессий.
Не стесняйтесь связаться со мной на Linked In: https://www.linkedin.com/in/mohd-ahmad-seemapuri/
Спасибо за чтение.