JavaScript 中有字符串池概念吗?我们可以让值/键只引用一个 String 对象吗?

Pyt*_*Boy 5 javascript string angularjs

我有一个包含大约 100 万个对象的大型 json 映射,每个对象包含大约 200 个键值对。例如。[{key1 : val1, key2 : val2, ...}, {key1 : val3, key2 : val4, ...}]

正如您所看到的,这里的键被复制了,每个键都意味着一个新的 String 对象。有没有其他方法可以让我说所有重复的键都应该指向同一个 String 对象以减少 map 的内存大小。有了上述统计数据,浏览器会因超过 1Gb 的内存而爆炸。

T.J*_*der 6

正如您所看到的,键在这里被重复,每个键都意味着一个新的 String 对象。

好吧,不,他们每个人都有一个字符串原语。尽管有细微的区别,但 JavaScript 两者兼而有之:

var sp = "primitive";
var so = new String("object");
Run Code Online (Sandbox Code Playgroud)

JavaScript中有字符串池的概念吗?

不是指您可以有意调用的任何外部内容,例如 Java 的intern.

给定的 JavaScript 引擎(V8、SpiderMonkey 等)可能会也可能不会在幕后重用字符串原语作为优化;它可以,因为字符串在 JavaScript 中是不可变的,但它是否曾经成为开发优先级列表的顶部......