Что означает, когда мы говорим, что примитивные ценности неизменяемы? [Дубликат]

Для записи:

s = "My name is {name} and I'm really {adjective}."
kwargs = dict((x[1], '') for x in s._formatter_parser())
# Now we have: `kwargs = {'name':'', 'adjective':''}`.
kwargs.update(name='mark')
print s.format(**kwargs)  # My name is mark and I'm really .
27
задан BryanH 10 December 2012 в 22:07
поделиться

5 ответов

A variable может содержать один из двух типов значений: primitive values или reference values.

  • Primitive values - данные, которые хранятся в стеке.
  • Primitive value хранится непосредственно в месте доступа к переменной.
  • Reference values - это объекты, которые хранятся в куче.
  • Reference value, хранящиеся в месте переменной является указателем на место в памяти, где хранится объект.
  • Примитивные типы включают Undefined, Null, Boolean, Number или String.

Основы:

Объекты - это совокупности свойств. Свойство может ссылаться на object или primitive. Primitives are values, у них нет свойств.

Обновлено:

JavaScript имеет 6 примитивных типов данных: string, number, boolean, null, undefined, symbol (новый в ES6). За исключением значений null и undefined, все значения примитивов имеют эквиваленты объектов, которые обертывают примитивные значения, например. объект String обертывает примитив строки. Все примитивы неизменяемы.

52
ответ дан flaviodesousa 28 August 2018 в 18:57
поделиться
85
ответ дан Aadit M Shah 28 August 2018 в 18:57
поделиться

Первобытный тип имеет фиксированный размер в памяти. Например, число занимает восемь байтов памяти, а логическое значение может быть представлено только одним битом. Тип числа является самым большим из примитивных типов. Если каждая переменная JavaScript резервирует восемь байтов памяти, переменная может непосредственно содержать любое примитивное значение.

Это упрощение и не предназначено как описание фактической реализации JavaScript.

Однако ссылочные типы - это еще одно дело. Объекты, например, могут быть любой длины - они не имеют фиксированного размера. То же самое относится к массивам: массив может иметь любое количество элементов. Аналогично, функция может содержать любое количество кода JavaScript. Поскольку эти типы не имеют фиксированного размера, их значения не могут храниться непосредственно в восьми байтах памяти, связанных с каждой переменной. Вместо этого переменная хранит ссылку на значение. Как правило, эта ссылка является некоторой формой указателя или адреса памяти. Это не значение самого значения, но оно сообщает переменной, где искать значение.

Различие между примитивными и ссылочными типами является важным, поскольку они ведут себя по-разному. Рассмотрим следующий код, который использует числа (примитивный тип):

var a = 3.14;  // Declare and initialize a variable
var b = a;     // Copy the variable's value to a new variable
a = 4;         // Modify the value of the original variable
alert(b)       // Displays 3.14; the copy has not changed

В этом коде нет ничего удивительного. Теперь рассмотрим, что произойдет, если мы немного изменим код, чтобы вместо массивов использовать массивы (ссылочный тип):

var a = [1,2,3];  // Initialize a variable to refer to an array
var b = a;        // Copy that reference into a new variable
a[0] = 99;        // Modify the array using the original reference
alert(b);         // Display the changed array [99,2,3] using the new reference

Если этот результат не кажется вам неожиданным, вы уже хорошо знакомы с различием между примитивными и ссылочными типами. Если это кажется удивительным, взгляните на вторую строчку. Обратите внимание, что это ссылка на значение массива, а не сам массив, который присваивается в этом выражении. После этой второй строки кода у нас все еще есть только один объект массива; у нас просто есть две ссылки на него.

1
ответ дан noddy 28 August 2018 в 18:57
поделиться

В javascript Primitive values находятся данные, которые хранятся на stack.

Primitive value хранится непосредственно в месте доступа к переменной.

И Reference values - это объекты, которые хранятся в heap.

Справочное значение, хранящееся в местоположении переменной, является указателем на местоположение в памяти, где хранится объект.

JavaScript поддерживает пять примитивных типов данных: number, string, Boolean, undefined, and null.

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

Из пяти только number, string, and Boolean являются реальными типами данных в смысле фактического хранения данных.

Undefined and null - типы, которые возникают при особых обстоятельствах. primitive type имеет фиксированный размер в памяти. Например, число занимает восемь байтов памяти, а логическое значение может быть представлено только одним битом.

И типы ссылок могут иметь любую длину - они не имеют фиксированного размера.

4
ответ дан sohel khalifa 28 August 2018 в 18:57
поделиться

Первичное значение - это базовая единица, которая представлена ​​на самом низком уровне реализации языка, а в JavaScript - один из следующих типов: number, string, Boolean, undefined и null.

0
ответ дан user5833579 28 August 2018 в 18:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: