为什么将字符串文字视为JavaScript中的原始类型?

问题描述 投票:3回答:1

[官方文档以及互联网上的大量文章都说'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.htmlenter image description here

最后检查后

let copy = someStringInitializedAbove

Devtools中,很明显尚未创建该字符串的新副本!

因此,我很确定字符串不会在赋值运算符上复制。但是仍然不明白为什么<< JS Primitives vs Reference这样的文章这么说。

官方文档以及互联网上的大量文章都说'some string'是原始值,这意味着每次我们将其分配给变量时,它都会创建副本。但是,此...
javascript v8 low-level value-type reference-type
1个回答
0
投票
从根本上讲,因为the specification says so
© www.soinside.com 2019 - 2024. All rights reserved.