JavaScript 字符串是如何存储的
在本文中,我们将尝试理解JavaScript中的字符串是如何存储的。字符串是JavaScript中的一种原始数据类型,它们被分配了内存中的一个特殊位置来存储和操作。这个特殊的位置被称为字符串常量池。字符串常量池是一个位于堆内的小缓存。JavaScript通过直接分配来存储字符串常量池中的所有值。
换句话说,字符串常量池主要存在于减少内存使用和提高现有实例的重复利用。在一些情况下,我们希望创建一个独立的String对象,即使它具有相同的值。在这种情况下,我们使用 new 关键字。
现在让我们通过一个基本的示例来了解字符串是如何存储在内存中的。
示例1: 在这个示例中,我们将创建字符串并理解它们如何存储在内存中。
JavaScript
let str1 = "Hello";
let str2 = "Hello";
let str3 = "World";
console.log(str1 == str2);
console.log(str1 == str3);
输出结果:
true
false
以下是上面示例中字符串在内存中的图示表示。
我们可以看到,str1和str2指向内存中的相同位置,而str3是新创建的,因为它的值不同。通过使相同值的字符串指向内存中的相同位置,字符串常量池节省了内存。
示例2: 在这个例子中,我们将使具有相同值的字符串指向内存中的不同位置。
Javascript
let str1 = new String("John");
let str2 = new String("John");
let str3 = new String("Doe");
console.log(str1 == str2);
console.log(str1 == str3);
输出:
false
false
在图像中可以看到,尽管str1和str2具有相同的值,但由于new关键字,它们指向内存中的不同位置。因此,当进行比较时返回false。
结论:
当使用引号(” “)创建字符串时,它们直接存储在字符串常量池中,相等的值引用相同的内存位置。而当使用new关键字创建字符串时,总是在堆内存中创建一个新实例,然后将值存储在字符串常量池中,因此即使存储的数据相同,字符串也不相等。