JS面试题中深拷贝的实现讲解_javascript技巧[br]在面试中你是否遇到过如下场景:[br]R:此时,机智的你可能会想到[br]R:机智的你[br]性能问题,stringify再解析其实需要耗费较多时间,特别是数据量大的时候。[br]一些类型无法拷贝,例如函数(不输出),正则(输出空对象),时间对象(输出时间字符串),Undefiend(不输出)[br]遇到循环引用的对象会出错[br]同层(非同层)同引用的问题,理论下两个key对应的val如果指向同一个对象,拷贝也应该指向一个相同新地址才对[br]R:如下:[br]// 非引用类型及函数将直接返回[br]// 特殊的引用类型处理[br]优点:实现了大多数数据类型的拷贝,所有非引用类型及引用类型的String Number Boolean Function Array Date RegExp[br]缺点:未考虑一些特殊的引用类型如Error Math Symbol Map Set JSON,函数属于引用拷贝,未解决循环引用的问题[br]R:将父层级的数据缓存对比(可以顺带解决同层(非同层)同引用的问题)[br]// 使用map结构可以不必循环缓存,提高效率[br]// 如果仔细观察可以发现解决了同层同引用的问题[br]R:理论下函数也可以通过new Function(code)来创建新的函数,但是如果遇到闭包函数,我们无法得到原函数的外层定义的变量及其原有作用域链,这些在JS词法解析时完成的步骤我们无法得知,所有只能引用原函数比较好。[br]Sum: 上面实现的缺点主要是没有完全覆盖特殊引用类型,但其实我们平时应该不会遇到那些类型,所以可以凑合使用。[br]以上就是JS面试题中深拷贝的实现讲解的详细内容,更多关于JS深拷贝的实现的资料请关注脚本之家其它相关文章!