Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/383.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 为什么';JS提供了一种在对象上执行深度复制的简单方法? 作为Python和C++的人,通过引用而不是值来复制A=拷贝对象根本不是直觉的。不仅如此,似乎还没有直接复制对象的方法JSON.parse(JSON.stringify)是最接近的选项(如果我知道正确的话),即使这样也有问题_Javascript_Pass By Reference_Deep Copy_Pass By Value - Fatal编程技术网

Javascript 为什么';JS提供了一种在对象上执行深度复制的简单方法? 作为Python和C++的人,通过引用而不是值来复制A=拷贝对象根本不是直觉的。不仅如此,似乎还没有直接复制对象的方法JSON.parse(JSON.stringify)是最接近的选项(如果我知道正确的话),即使这样也有问题

Javascript 为什么';JS提供了一种在对象上执行深度复制的简单方法? 作为Python和C++的人,通过引用而不是值来复制A=拷贝对象根本不是直觉的。不仅如此,似乎还没有直接复制对象的方法JSON.parse(JSON.stringify)是最接近的选项(如果我知道正确的话),即使这样也有问题,javascript,pass-by-reference,deep-copy,pass-by-value,Javascript,Pass By Reference,Deep Copy,Pass By Value,a) 在一种所有变量都被视为对象的语言中,=运算符为什么要区分基本数据类型和非基本数据类型,以决定是按值复制还是按引用复制 b) 为什么对象不能按值复制 c) 对于习惯于将对象按值复制到没有值的代码的初学者来说,哪些技术是有帮助的 a) 在一种所有变量都被视为对象的语言中, =运算符为什么区分[…] =(赋值)运算符不区分基本数据类型和非基本数据类型。考虑到赋值后会保留相等性(不包括例外情况,例如NaN,…),这两种方法的效果都差不多 b) 为什么对象不能按值复制 a)中的错误假设导致了这一点。

a) 在一种所有变量都被视为对象的语言中,
=
运算符为什么要区分基本数据类型和非基本数据类型,以决定是按值复制还是按引用复制

b) 为什么对象不能按值复制

c) 对于习惯于将对象按值复制到没有值的代码的初学者来说,哪些技术是有帮助的

a) 在一种所有变量都被视为对象的语言中, =运算符为什么区分[…]

=
(赋值)运算符不区分基本数据类型和非基本数据类型。考虑到赋值后会保留相等性(不包括例外情况,例如
NaN
,…),这两种方法的效果都差不多

b) 为什么对象不能按值复制

a)中的错误假设导致了这一点。赋值不是副本,对象的副本不保持相等

或者想想:
var obj={a:{b:1}

obj.a
值是多少?它只是对
{b:1}
引用

c) 对于习惯于复制对象的初学者来说,哪些技巧是有帮助的 按值编码而不使用它

有很多方法可以做到这一点。还有两件小事

作为第一种情况,我们知道对象的布局。因此,创建一个模板或构造函数,并将所有值传递到相应的属性中

作为第二种情况,我们假设一个循环对象包含深度为n的javascript中所有可能的内容(函数、regexp、符号、未定义的等等),并构建一些内容(而不是
json.stringify

首先:


假设:

基本数据类型和非基本数据类型都有默认的getter、setter等

a) 在一种所有变量都被视为对象的语言中, =运算符为什么区分[…]

=
(赋值)运算符不区分基本数据类型和非基本数据类型。考虑到赋值后会保留相等性(不包括例外情况,例如
NaN
,…),这两种方法的效果都差不多

b) 为什么对象不能按值复制

a)中的错误假设导致了这一点。赋值不是副本,对象的副本不保持相等

或者想想:
var obj={a:{b:1}

obj.a
值是多少?它只是对
{b:1}
引用

c) 对于习惯于复制对象的初学者来说,哪些技巧是有帮助的 按值编码而不使用它

有很多方法可以做到这一点。还有两件小事

作为第一种情况,我们知道对象的布局。因此,创建一个模板或构造函数,并将所有值传递到相应的属性中

作为第二种情况,我们假设一个循环对象包含深度为n的javascript中所有可能的内容(函数、regexp、符号、未定义的等等),并构建一些内容(而不是
json.stringify

首先:


假设:


基本数据类型和非基本数据类型都有默认的getter、setter等,您可以使用它们来复制jsobjects@NijeeshJoshy不,只有一个浅的Copyjava和C++,你必须编写一个拷贝构造函数。有些语言有一个深层复制的机制,但是它们几乎都是“某些需要的汇编”。很少有人提供真正简单的深度复制方法。JavaScript只是少数没有提供标准方法的代码之一。一般来说,深度拷贝在前端上下文中很有用的场景并不多,这正是JavaScript最初设计用于非原语的目的。非原语是作者任意描述的对象,语言无法从逻辑上“理解”其设计。这意味着,由于循环引用、单例引用等方面的潜在问题,作者还必须是定义任何深度复制功能的人。这适用于所有允许任意设计的数据结构的语言objects@NijeeshJoshy不,只有一个浅的Copyjava和C++,你必须编写一个拷贝构造函数。有些语言有一个深层复制的机制,但是它们几乎都是“某些需要的汇编”。很少有人提供真正简单的深度复制方法。JavaScript只是少数没有提供标准方法的代码之一。一般来说,深度拷贝在前端上下文中很有用的场景并不多,这正是JavaScript最初设计用于非原语的目的。非原语是作者任意描述的对象,语言无法从逻辑上“理解”其设计。这意味着,由于循环引用、单例引用等方面的潜在问题,作者还必须是定义任何深度复制功能的人。这适用于所有允许任意设计的数据结构的语言。