是否缓存了JavaScript字符串,以便在创建其他地方已存在的字符串时,只有一个字符串实例并且它是共享的?
示例:
function rgbString(r, g, b, a) {
if (a === 1) {
return "rgb(" + r + "," + g + "," + b + ")";
} else {
return "rgba(" + r + "," + g + "," + b + "," + a + ")";
}
}
如果多次调用它:
rgbString(255,0,0,1)
"rgb(255,0,0)"
rgbString(255,0,0,1)
"rgb(255,0,0)"
rgbString(255,0,0,1)
"rgb(255,0,0)"
rgbString(255,0,0,.5)
"rgba(255,0,0,0.5)"
rgbString(255,0,0,.5)
"rgba(255,0,0,0.5)"
生成多个相同的字符串,一些有/无alpha,只有一个版本的相同字符串?
rgbString(255,0,0,.5) === rgbString(255,0,0,.5)
true
显示它们评估为保存值,但这并不意味着它们是共享/缓存的。
我不认为Chrome的分析器可以提供帮助,因为字符串可能是" native"内存,因此超出了堆分析器的范围。
注意:这被标记为另一个问题的副本。我有些满意,但并不完全。
先前的问题仅仅是比较的速度,然后假设快速暗示"实习"。
我对内存效率感兴趣,而不是cpu速度。虽然实习的间接证明很有意思,但我想要一种非常具体的答案来证明用于创建相同字符串的任何方法只能在内存中产生一个。这很难,因为" native"内存和JS堆。
有没有办法确定相同的字符串只存储一次?