Movatterモバイル変換


[0]ホーム

URL:


  1. Глоссарий MDN Web Docs
  2. Primitive

This page was translated from English by the community.Learn more and join the MDN Web Docs community.

View in EnglishAlways switch to English

Primitive

Примитив (значение примитивного типа, примитивный тип данных) это данные, которые не являютсяобъектом и не имеютметодов. ВJavaScript 7 простых типов данных:string,number,boolean,null,undefined,symbol (новое вECMAScript 2015),bigint.

Чаще всего значение примитивного типа представлено в низкоуровневой реализации языка.

Всепримитивы неизменяемы (immutable), то есть они не могут быть изменены. Важно не путать сам примитив с переменной, которой присвоено значение примитивного типа. Переменной может быть переприсвоено новое значение, но существующее значение примитивного типа не может быть изменено подобно объектам, массивам и функциям.

Пример

Этот пример поможет понять, что значения примитивных типов неизменяемы(immutable).

JavaScript

js
// Using a string method doesn't mutate the stringvar bar = "baz";console.log(bar); // bazbar.toUpperCase();console.log(bar); // baz// Using an array method mutates the arrayvar foo = [];console.log(foo); // []foo.push("plugh");console.log(foo); // ["plugh"]// Assignment gives the primitive a new (not a mutated) valuebar = bar.toUpperCase(); // BAZ

Примитив может быть заменён, но он не может быть напрямую изменён.

Другой пример [ Step-by-step ]

Следующий пример поможет разобраться как JavaScript работает с примитивами.

JavaScript

js
// The Primitivelet foo = 5;// Defining a function that should change the Primitive valuefunction addTwo(num) {  num += 2;}// Another function trying to do the same thingfunction addTwo_v2(foo) {  foo += 2;}// Calling our first function while passing our Primitive as an argumentaddTwo(foo);// Getting the current Primitive valueconsole.log(foo); // 5// Trying again with our second function...addTwo_v2(foo);console.log(foo); // 5

Вы ожидали, что будет 7 вместо 5? Если так, тогда прочитайте, как работает этот код:

  • При вызове обеих функцийaddTwoи addTwo_v2, JavaScript ищет значение для идентификатораfoo. JavaScript правильно определяет нашу переменную, созданную с помощью первого оператора

  • После этого JavaScript передаёт найденный аргумент в функцию в качестве параметра

  • Перед выполнением операторов в теле функции,JavaScript берёт исходный переданный аргумент (который является примитивом) и создаёт его локальную копию. Эти копии, существующие только внутри областей функций, доступны через идентификаторы, указанные в определениях функций (num дляaddTwo, foo дляaddTwo_v2)

  • Затем выполняются операторы функций:

    • В первой функции был создан локальный аргументnum. Мы увеличиваем его значение на 2 (а не значение исходной переменнойfoo).
    • Во второй функции был создан локальный аргументfoo. Мы увеличиваем его значение на 2 (а не значение исходной (внешней) переменнойfoo). Кроме того, в этой ситуации, внешняя переменнаяfoo является недоступнойникаким способом. Это связано с лексическими областями JavaScript и, как следствие, с затенением переменных. Локальная переменнаяfoo скрывает внешнюю переменнуюfoo. Чтобы получить больше информации, смотриClosures.
  • Таким образом, никакие изменения внутри наших функцийне будут влиять на ИСХОДНУЮfoo вообще, так как мы работаем с еёкопиями

Вот почему примитивы неизменяемы(immutable). Потому что мы не работаем над ними напрямую. Мы создаём копию и продолжаем работать с ней, не касаясь исходных значений.

Обёртки примитивных типов в JavaScript

За исключениемnull иundefined, все примитивные значения имеют объектный аналог, который оборачивает значение примитивного типа:

  • String для string примитива.
  • Number для number примитива.
  • BigInt для bigint примитива.
  • Boolean для boolean примитива.
  • Symbol для symbol примитива.

МетодvalueOf() типа обёртки возвращает значение примитивного типа.

Смотрите также

Общие сведения

Help improve MDN

Learn how to contribute

This page was last modified on byMDN contributors.


[8]ページ先頭

©2009-2026 Movatter.jp