官方文档以及互联网上的大量文章都说这'some string'
是一个原始值,这意味着每次我们将它分配给一个变量时它都会创建一个副本。
但是,这个问题(及其答案)How to force JavaScript to deep copy a string? substr
演示了实际上 V8 甚至在方法上也不会复制字符串。
每次将字符串传递给函数时都复制字符串也是很疯狂的,而且没有意义。在 C#、Java 或 Python 等语言中,String 数据类型绝对是一种引用类型。
此外,这个链接显示了层次结构,我们毕竟可以看到 HeapObject。 https://thlorenz.com/v8-dox/build/v8-3.25.30/html/d7/da4/classv8_1_1internal_1_1_sliced_string.html
最后,经过检查
let copy = someStringInitializedAbove
在Devtools中,很明显尚未创建该字符串的新副本!
所以我很确定在分配时不会复制字符串。但是我仍然不明白为什么这么多像JS Primitives vs Reference这样的文章说它们是。
慕容森
相关分类