题目:
- 了解值类型和引用类型的区别,了解各种对象的读取、遍历方式,并在
util.js
中实现以下方法:
// 使用递归来实现一个深度克隆,可以复制一个目标对象,返回一个完整拷贝
// 被复制的对象类型会被限制为数字、字符串、布尔、日期、数组、Object对象。不会包含函数、正则对象等
function cloneObject(src) {
// your implement
分类型进行遍历克隆。
首先
- 区分值类型、引用类型、基本类型
值类型:数值、布尔值、null、undefined,声明一个值类型变量,编译器会在栈上分配一个空间,这个空间对应着该值类型变量,空间里存储的就是该变量的值。也就是说值类型指的是保存在栈内存中的简单数据段,按值访问,操作的就是实际保存的值;
引用类型:Object / Array / Function / Date / RegExp / Error / Map / Set …引用类型指的是那些保存在堆内存中的对象,意思是,变量中保存的实际上只是一个指针,这个指针执行内存中的另一个位置,由该位置保存对象;引用访问,当查询时,我们需要先从栈中读取内存地址,然后再顺藤摸瓜地找到保存在堆内存中的值;
看到一个博主说的,值类型就像现金(用的时候直接用),引用类型就想存折,用的时候还得去取,这个还是挺形象的。
基本类型:Undefined / Null / Boolean / Number / String
如果数据是原始(基本类型):Undefined / Null / Boolean / Number / String则直接复制即可clone;
对象和属性
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Statements/for...in