Javascript 为什么';JS提供了一种在对象上执行深度复制的简单方法? 作为Python和C++的人,通过引用而不是值来复制A=拷贝对象根本不是直觉的。不仅如此,似乎还没有直接复制对象的方法JSON.parse(JSON.stringify)是最接近的选项(如果我知道正确的话),即使这样也有问题
a) 在一种所有变量都被视为对象的语言中,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)中的错误假设导致了这一点。
=
运算符为什么要区分基本数据类型和非基本数据类型,以决定是按值复制还是按引用复制
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最初设计用于非原语的目的。非原语是作者任意描述的对象,语言无法从逻辑上“理解”其设计。这意味着,由于循环引用、单例引用等方面的潜在问题,作者还必须是定义任何深度复制功能的人。这适用于所有允许任意设计的数据结构的语言。