基本类型和引用类型的比较
JavaScript 中的原始值(undefined
、null
、布尔值、数字和字符串)和对象(对象、数组、函数)有着根本区别。原始值不可更改,原始值的比较是值的比较;对象和原始值不同,对象值可以更改,对象的比较也不是值的比较,即使两个对象包含同样的属性和值,也是不相等的:
我们通常将对象称作引用类型,以此来和基本类型做区分,对象值都是引用,对象的比较都是引用的比较,当且仅当它们引用同一个对象时才相等:
以上赋值是浅拷贝,仅仅是赋值的引用值,而不是对象本身,这样如果涉及到嵌套对象(对象属性值是也是对象),在修改一个对象时,会影响到引用的对象:
要避免这种对象「污染」,保持拷贝后对象的独立性,就需要进行深拷贝,而 JavaScript 又不像 PHP 那样支持 clone
语句,只能自己来实现一个 clone
函数通过迭代显示复制对象的每个属性或数组的每个元素,从而得到拷贝对象的完整副本:
No Comments