2014-03-30 30 views
1

在JavaScript中,字符串和布尔值被认为是原始类型。 原始类型通过复制传递。 OK考虑下面的代码:JavaScript字符串是原始类型?

var s1 = "this is a string of 1000 characters ..."; 
var s2 = s1; // (2) 

符合(2)会发生什么? 1000个字符被复制到变量s2? 或者是否有一个存储位置,s1和s2是指这个存储位置? 我相信第二个是真的。 如果是这样,为什么所有书籍都说字符串是原始类型,它们不是,它们是 引用类型,不是吗?

回答

1

第(2)行发生了什么? 1000个字符被复制到变量s2? OR是否有一个存储位置,s1和s2是指这个存储位置?

这是一个JavaScript引擎的实现细节,没有办法从JavaScript程序内部区分。

为什么所有的书说字符串是基本类型

语言defines them as such

它们是参考类型,不是吗?

它们可能会在低于JS的级别上实现,但这对JS作者来说并不重要。

0

第(2)行会发生什么?

这或多或少的实现定义。到,它会看起来像一个副本。但是,引擎可以自由优化它,并且可能会。毫无疑问,类似copy-on-write

在JavaScript中,有原始字符串和字符串对象。值得了解这些差异。一个字符串对象是通过引用传递的,但是当所有的字符串方法返回一个新的字符串时,你不可能修改它。