2017-04-10 25 views
0

以下是否導致內存複製操作?JavaScript中的字符串分配行爲

1: var foo, bar; 
2: foo = 'abc'; 
3: bar = foo; 

被複制到該存儲器的foo存儲器表示在指出通過bar第3行?

如果foo是1MB大小的字符串(與本例中的6字節不同),是否會更改?

最後,這種行爲是由ECMAScript規範定義還是留給實現者?

+0

這只是var的引用,所以都指向相同的原語。所以,恕我直言,會有一個原始的,而兩個增值稅引用它。我希望我能說得更好。 – Jai

+0

但字符串有傳遞值的語義,這似乎與您相反。 – Ben

+0

@BenAston你在哪裏觀察按值傳遞的語義? JavaScript對非數字值具有「通過引用值」的語義 - 也稱爲「通過共享調用」:https://en.wikipedia.org/wiki/Evaluation_strategy#Call_by_sharing – Dai

回答

2

字符串在JavaScript中是不變的,可以被認爲是「引用類型」(A-LA Java和C#):Are JavaScript strings immutable? Do I need a "string builder" in JavaScript?

我在ECMAScript的7規範咋一看,但我無法找到一個單一的,簡潔的權威參考,簡單地說:「字符串是不可變」 - 你必須推斷,從規範的其餘部分:https://www.ecma-international.org/ecma-262/7.0/index.html

關於個人的問題:

  1. 沒有,字符串的內容是n沒有在作業中複製,對字符串的引用是。
  2. 不,如果foo指向一個1MB大小的字符串,那麼和以前一樣,會傳遞一個引用。
  3. 請參閱第二段。