[官方文档以及互联网上的大量文章都说'some string'
是原始值,这意味着每次我们将其分配给变量时,它都会创建副本。
但是,此问题(及其答案)How to force JavaScript to deep copy a string?表明,实际上V8即使在substr
方法上也不会复制字符串。
这在我们每次将字符串传递给函数时复制字符串都是很疯狂的,没有任何意义。在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这样的文章这么说。
官方文档以及互联网上的大量文章都说'some string'是原始值,这意味着每次我们将其分配给变量时,它都会创建副本。但是,此...