引用被分配给哪些类型,而不是在Javascript中被复制



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

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

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

JavaScript根据规范,您有类型:未定义、null、布尔值、字符串、数字、对象。您可以将它们视为不可变的,除了对象,它实际上只是一个(哈希)映射。所以是的,如果你分配变量,它会被"复制"(你不在乎它是否真的是),除非它是一个对象类型。举个例子:

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# 外部调用不安全函数或使用不安全代码,则必须固定它们。 例如:

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

最新更新