2017-04-10 61 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. 请参阅第二段。