Как передается значение примитивного типа?
Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Передача примитивных типов в JavaScript
Примитивные типы в JavaScript передаются по значению (by value). Это ключевое различие между примитивами и объектами, которое определяет поведение переменных при присваивании и передаче в функции.
По значению vs По ссылке
Когда вы передаёте примитивное значение, JavaScript создаёт копию этого значения. Изменения в копии не влияют на исходное значение:
let a = 5;
let b = a; // b получает копию значения 5
b = 10;
console.log(a); // 5
console.log(b); // 10
То же самое происходит при передаче в функцию:
function modify(num) {
num = num + 1;
return num;
}
let x = 42;
modify(x); // функция получает копию значения 42
console.log(x); // 42 (исходное значение не изменилось)
Какие типы являются примитивами?
В JavaScript семь примитивных типов:
- Number - числа (включая Infinity, -Infinity, NaN)
- String - текстовые строки
- Boolean - true/false
- Undefined - переменная без значения
- Null - отсутствие значения
- Symbol - уникальные идентификаторы
- BigInt - целые числа большой размерности
Все остальное (массивы, объекты, функции) — это объекты, которые передаются по ссылке.
Практический пример
// Примитивы - копируются
function changeValue(value) {
value = 100;
}
let primitiveValue = 50;
changeValue(primitiveValue);
console.log(primitiveValue); // 50
// Объекты - передаются по ссылке
function changeProperty(obj) {
obj.name = 'Changed';
}
let objectValue = { name: 'Original' };
changeProperty(objectValue);
console.log(objectValue.name); // 'Changed'
Важные следствия
Неизменяемость примитивов: примитивы нельзя изменить на месте. Любая операция создаёт новое значение:
let str = 'hello';
str[0] = 'H'; // не сработает
console.log(str); // 'hello'
let newStr = str.toUpperCase(); // создаёт новую строку
console.log(newStr); // 'HELLO'
Проверка типов: используйте typeof для определения примитивных типов:
console.log(typeof 42); // 'number'
console.log(typeof 'text'); // 'string'
console.log(typeof true); // 'boolean'
console.log(typeof undefined); // 'undefined'
console.log(typeof Symbol('id')); // 'symbol'
console.log(typeof 123n); // 'bigint'
console.log(typeof null); // 'object' (известный баг JavaScript)
Понимание этого механизма критично для написания предсказуемого кода и избежания ошибок, связанных с неожиданными изменениями переменных.