Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/424.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
引用被分配到哪些类型而不是在Javascript中复制?_Javascript_Variables_Memory_Pointers_Garbage Collection - Fatal编程技术网

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

引用被分配到哪些类型而不是在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。您可以将它们视为不可变的对象,而对象实际上只是

我在用手机,所以我不能自己测试。而且,我可能会错过一些东西

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


另外,我听说不能在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的情况并非如此。@nnnnnn
typeof
运算符在这方面有一个众所周知的错误。他们希望Ecmascript和谐,但后来他们发现这会破坏太多的脚本。因此,我们必须接受这样一个事实,即
typeof null==“object”
没有必要复制非对象——正如您所说,它们是不可变的,因此您无法区分它们(在Python和Ruby中,您可以,因为您可以查看对象标识)。我发现“所有东西都是通过间接引用的,因此只有引用被复制”的模型在概念上更简单。