在Javascript中,字符串和布尔值被认为是原始类型。 原始类型通过副本传递。 好的,请考虑以下代码:
var s1 = "this is a string of 1000 characters ...";
var s2 = s1; // (2)
第(2)行会发生什么? 1000个字符被复制到变量s2? OR是否有一个内存位置,s1和s2都指向此内存位置? 我相信第二个是真的。 如果是这样,为什么所有书都说字符串是原始类型,它们不是,它们是 参考类型,不是吗?
答案 0 :(得分:1)
第(2)行会发生什么? 1000个字符被复制到变量s2? OR是否有一个内存位置,s1和s2都指向此内存位置?
这是JavaScript引擎的一个实现细节,没有办法区分JavaScript程序内部。
为什么所有书都说字符串是原始类型
它们是引用类型,不是吗?
它们可能以低于JS的方式实现,但这对JS作者来说无关紧要。
答案 1 :(得分:0)
第(2)行会发生什么?
定义了或多或少的实现。要你,它看起来就像一个副本。但是,引擎可以自由地优化它,并且可能会。毫无疑问,像copy-on-write。
在JavaScript中,有原始字符串和字符串对象。值得了解这些差异。字符串对象通过引用传递,但看到所有字符串方法都返回一个新字符串,您不太可能修改它。