基本类型和引用类型的比较

JavaScript 中的原始值(undefinednull、布尔值、数字和字符串)和对象(对象、数组、函数)有着根本区别。原始值不可更改,原始值的比较是值的比较;对象和原始值不同,对象值可以更改,对象的比较也不是值的比较,即使两个对象包含同样的属性和值,也是不相等的:

原始值和对象引用的比较

我们通常将对象称作引用类型,以此来和基本类型做区分,对象值都是引用,对象的比较都是引用的比较,当且仅当它们引用同一个对象时才相等:

对象的比较

以上赋值是浅拷贝,仅仅是赋值的引用值,而不是对象本身,这样如果涉及到嵌套对象(对象属性值是也是对象),在修改一个对象时,会影响到引用的对象:

浅拷贝

要避免这种对象「污染」,保持拷贝后对象的独立性,就需要进行深拷贝,而 JavaScript 又不像 PHP 那样支持 clone 语句,只能自己来实现一个 clone 函数通过迭代显示复制对象的每个属性或数组的每个元素,从而得到拷贝对象的完整副本:

JavaScript深拷贝实现

上一篇: 全局对象和包装对象

下一篇: 类型转化