0
以下是否導致內存複製操作?JavaScript中的字符串分配行爲
1: var foo, bar;
2: foo = 'abc';
3: bar = foo;
被複制到該存儲器的foo
存儲器表示在指出通過bar
第3行?
如果foo
是1MB大小的字符串(與本例中的6字節不同),是否會更改?
最後,這種行爲是由ECMAScript規範定義還是留給實現者?
以下是否導致內存複製操作?JavaScript中的字符串分配行爲
1: var foo, bar;
2: foo = 'abc';
3: bar = foo;
被複制到該存儲器的foo
存儲器表示在指出通過bar
第3行?
如果foo
是1MB大小的字符串(與本例中的6字節不同),是否會更改?
最後,這種行爲是由ECMAScript規範定義還是留給實現者?
字符串在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
關於個人的問題:
foo
指向一個1MB大小的字符串,那麼和以前一樣,會傳遞一個引用。
這只是var的引用,所以都指向相同的原語。所以,恕我直言,會有一個原始的,而兩個增值稅引用它。我希望我能說得更好。 – Jai
但字符串有傳遞值的語義,這似乎與您相反。 – Ben
@BenAston你在哪裏觀察按值傳遞的語義? JavaScript對非數字值具有「通過引用值」的語義 - 也稱爲「通過共享調用」:https://en.wikipedia.org/wiki/Evaluation_strategy#Call_by_sharing – Dai