引用被分配到哪些类型而不是在Javascript中复制?
我在用手机,所以我不能自己测试。而且,我可能会错过一些东西 我知道当一个数字被分配时,比如说a=b,b实际上被复制到a中。但是,如果b是一个对象,则只传递一个引用。其他类型的呢?有什么我应该担心的吗引用被分配到哪些类型而不是在Javascript中复制?,javascript,variables,memory,pointers,garbage-collection,Javascript,Variables,Memory,Pointers,Garbage Collection,我在用手机,所以我不能自己测试。而且,我可能会错过一些东西 我知道当一个数字被分配时,比如说a=b,b实际上被复制到a中。但是,如果b是一个对象,则只传递一个引用。其他类型的呢?有什么我应该担心的吗 另外,我听说不能在C#中使用指针,因为变量会被JC移动。在Javascript中也是这样吗?那么这些引用在这些语言中是如何解决的呢?javascript 根据规范,您有以下类型:未定义、null、boolean、string、number、object。您可以将它们视为不可变的对象,而对象实际上只是
另外,我听说不能在C#中使用指针,因为变量会被JC移动。在Javascript中也是这样吗?那么这些引用在这些语言中是如何解决的呢?javascript 根据规范,您有以下类型:未定义、null、boolean、string、number、object。您可以将它们视为不可变的对象,而对象实际上只是一个(散列)映射。 所以是的,若你们分配变量,它是“复制的”(你们不在乎它是否真的是),除非它是一个对象类型。例如:
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#(pointer=reference)中使用指针,但如果在.net/C#外部调用不安全函数,或者使用不安全代码,则必须锁定它们。e、 g:
fixed (int* p = something) { /*p is safe to use, memory doesn't move */}
复制原语,通过引用传递所有其他对象值。此外,Javascript有5种原语类型:number、string、boolean、undefined和null。其他一切都是对象。@Pumbaa80-最近发出了
警报(typeof null)
?Bane-JS没有指针:引用和指针是重叠的概念,但它们不是一回事。另请注意,“通过引用传递”在某些语言中对于函数参数有特定的含义,函数可以将新引用分配给作为参数传递的函数外部的变量,但JavaScript的情况并非如此。@nnnnnntypeof
运算符在这方面有一个众所周知的错误。他们希望Ecmascript和谐,但后来他们发现这会破坏太多的脚本。因此,我们必须接受这样一个事实,即typeof null==“object”
没有必要复制非对象——正如您所说,它们是不可变的,因此您无法区分它们(在Python和Ruby中,您可以,因为您可以查看对象标识)。我发现“所有东西都是通过间接引用的,因此只有引用被复制”的模型在概念上更简单。