原始数据类型(5种):undefined null number string boolean
引用数据类型(1种):
虽然引用数据类型只有1种,但是它可以将多种原始的数据存在一个单元中,这也就是为什么它被称为“复合数据类型”,也就是对象——Object。
原始数据类型和引用数据类型的区别:
首先咱们先来看下它的概念,概念如果看不太明白,没有关系,我会在之后举例。
原始数据类型:在内存中,存放在栈中的简单数据段,也就是说,他们直接存储在变量访问的位置。
引用数据类型:在内存中,存放在堆中的对象,就是说,存储在变量处的值是一个指针,指向存储对象的内存处。
举例说明:
原始数据类型就像一个文件,我们可以直接找到并打开的过程。
引用数据类型就像一个文件的快捷方式,我们是通过快捷方式找到文件的位置,打开的过程。
<script> function clone(obj) { var o if (obj instanceof Array) { o = [] let len = obj.length whlie(len--) { o[len] = clone(obj[len]) } return o } else if (obj instanceof Object) { o = {} for (let key in obj) { o[key] = clone(obj[key]) } return o } else { return obj } } // 代码优化 function clone2(obj) { let o = obj instanceof Array ? [] : {} for (let key in obj) { if (obj[key] instanceof Object) { //判断对象中是否还有对象,有,继续递归 o[key] = clone2(obj[key]) } else { o[key] = obj[key] //只要不是对象就直接放进去 } } return o } // 代码再优化 function clone3(obj) { let o = obj instanceof Array ? [] : {} for (let key in obj) { o[key] = obj[key] instanceof Object ? clone3(obj[key]) : obj[key] } }</script>
作者:饥人谷_米弥轮
链接:https://www.jianshu.com/p/f2799d222268