В этой статье я попытаюсь объяснить, как javascript работает со строками в памяти.

Итак, прежде всего, строки — это примитивный тип данных, который хранится в специальном месте в памяти, называемом пул строковых констант.

Пул строковых констант — это небольшой кэш, который находится в куче.

давайте сначала проверим нормальное назначение строки следующим образом:

let str1 = "Hello";
let str2 = "Hello";
let str3 = "World";
console.log(str1 == str2); // true
console.log(str1 == str3); // false

Приведенный выше код представлен в памяти следующим образом:

Мы видим, что str1 и str2 указывают на одно и то же место в памяти, в то время как для str3 создается новое пространство, поскольку оно имеет другое значение. Таким образом, пул строковых констант экономит память, заставляя одну и ту же строку значений указывать на одно и то же место в памяти.

Теперь у нас есть 2 способа создать строку следующим образом:

let userName= "Mohamed";
let userName2 = new String("Mohamed");

Разница между ними в основном отражается в распределении памяти.

Мы знаем, что в JavaScript все объекты являются ссылочными типами и размещаются в куче памяти.

В то же время для эффективной обработки строк механизм V8 поддерживает пул строковых констант. Строки хранятся в пуле строковых констант.

Таким образом, диаграмма распределения памяти приведенного выше кода во время выполнения выглядит следующим образом:

userName ссылаются на строку в пуле строковых констант напрямую, а userName2 ссылаются на объект в куче, созданный с использованием ключевого слова new.

Другой пример:

let userName = new String("Mohamed");
let userName1 = new String("Mohamed");
let userName2 = new String("Nour");
console.log(userName == userName1); //false
console.log(userName == userName2); //false

На изображении видно, что хотя userName и userName1 имеют одинаковое значение, но из-за нового ключевого слова они ссылаются на разные места в памяти. Следовательно, они возвращают false при сравнении.

Вывод:

При создании строк с использованием кавычек (" ") они сохраняются непосредственно в пуле строковых констант, где одинаковые значения относятся к одному и тому же месту в памяти. Принимая во внимание, что когда строки создаются с использованием нового ключевого слова, новый экземпляр всегда создается в памяти кучи, а затем значение сохраняется в пуле строковых констант из-за этого, даже если сохраненные данные одинаковы, строки не будут равны.