Junior
Каква е разликата между различните типове данни?
sobes.tech AI
Отговор от AI
В JavaScript данните се делят на примитивни типове и обекти.
Примитивни типове:
- String: Последователност от символи. Непроменяем.
- Number: Числа, включително цели и с плаваща точка, както и
Infinity,-InfinityиNaN. - Boolean: Логическа стойност (
trueилиfalse). - Null: Специална стойност, представляваща липсата на обект.
- Undefined: Стойност на променлива, която не е била присвоена.
- Symbol: Уникален и непроменяем примитивен тип, използван за идентификатори на свойства на обекта.
- BigInt: Цели числа с произволна дължина.
Обекти:
- Object: Колекция от двойки ключ-стойност. Модифицируем. Примери: масиви, функции, регулярни изрази, дати.
Основни разлики:
- Модифицируемост (Mutability): Примитивните типове са неизменяеми, т.е. не може да се промени стойността им директно. При опит за промяна се създава нова копие. Обектите са променяеми, техните свойства могат да се добавят, изтриват и променят.
- Преминаване по стойност/връзка: Примитивните типове се предават по стойност (копира се самата стойност). Обектите се предават по връзка (копира се връзка към мястото в паметта, където се съхранява обектът).
- Сравнение: Примитивните типове се сравняват по стойност. Обектите се сравняват по връзка (две променливи сочат към един и същ обект в паметта).
// Примери
let str1 = "hello";
let str2 = str1; // str2 получава копие на стойността на str1
str1 = "world"; // Създава се нов низ "world" за str1
console.log(str2); // "hello" - str2 не се промени
let obj1 = { name: "Alice" };
let obj2 = obj1; // obj2 получава връзка към същия обект като obj1
obj1.name = "Bob"; // Променя се свойството на обекта, към който сочат и двете променливи
console.log(obj2.name); // "Bob" - obj2 се промени
let num1 = 10;
let num2 = 10;
console.log(num1 === num2); // true - стойностите са равни
let objA = { value: 1 };
let objB = { value: 1 };
console.log(objA === objB); // false - сравняват се връзки (сочат към различни обекти, въпреки че съдържанието е същото)
Таблица на разликите:
| Признак | Примитивни типове | Обекти |
|---|---|---|
| Модифицируемост | Непроменяеми | Променяеми |
| Предаване | По стойност | По връзка |
| Сравнение | По стойност | По връзка |
| Съхранение | Пряко в променливата | Връзка към мястото в паметта |
| Типове данни | String, Number, Boolean, Null, Undefined, Symbol, BigInt | Обект (включително масиви, функции и др.) |