← Назад к вопросам

Как передается значение примитивного типа?

1.8 Middle🔥 131 комментариев
#JavaScript Core

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI3 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Передача примитивных типов в 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 семь примитивных типов:

  1. Number - числа (включая Infinity, -Infinity, NaN)
  2. String - текстовые строки
  3. Boolean - true/false
  4. Undefined - переменная без значения
  5. Null - отсутствие значения
  6. Symbol - уникальные идентификаторы
  7. 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)

Понимание этого механизма критично для написания предсказуемого кода и избежания ошибок, связанных с неожиданными изменениями переменных.