2014-03-30 24 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中,有原始字符串和字符串對象。值得了解這些差異。一個字符串對象是通過引用傳遞的,但是當所有的字符串方法返回一個新的字符串時,你不可能修改它。