引用的类型是什么类型而不是在Javascript中复制?

时间:2012-06-24 09:01:00

标签: javascript variables memory pointers garbage-collection

我在手机上,所以我无法自己测试。另外,我可能会错过一些东西。

我知道当分配一个数字时,比如a = b,b实际上被复制到一个。但是,如果b是一个对象,只需要传递一个参考。什么与其他类型?有什么我应该担心的吗?

另外,我听说你不能在C#中使用指针,因为变量会被JC移动。它在Javascript中是一样的吗?那么这些语言如何用这些语言解决?

1 个答案:

答案 0 :(得分:1)

<强>的javascript 根据规范,您有类型:undefined,null,boolean,string,number,object。您可以将它们视为除了对象之外的 immutable ,它实际上只是一个(哈希)映射。 所以是的,如果你分配变量,它就会被“复制”(你不关心它是否真的如此),除非它是一个对象类型。举个例子:

var x = "hello";
var y = x; //copy or reference, who cares?
x += " world"; //new string object, x references it
alert(y); //alerts hello

<强> C# 根据C#2.0规范,有结构/值类型类/引用类型。因此,从实际的角度来看,值类型的变量实际上将数据存储在调用堆栈上(并在赋值时被复制),并且引用类型的变量只是一个引用(并且数据转到堆)。例如:

int holds_a_value = 5;
StringBuilder holds_a_reference = new StringBuilder();

您可以在C#(指针=引用)中使用指针,但如果您在.net / C#之外调用不安全的函数,则必须引脚 ,或使用不安全代码。 e.g:

fixed (int* p = something) { /*p is safe to use, memory doesn't move */}