- var a = [], b = [];
- console.log(a==b);
控制台的打印结果是什么? 答案是: false.
接下来看解析:
原始值的比较是值的比较:
它们的值相等时它们就相等 (==)
它们的值和类型都相等时它们就恒等 (===).
对象和原始值不同, 对象的比较并非值的比较, 而是引用的比较:
即使两个对象包含同样的属性及相同的值, 它们也是不相等的
即使两个数组各个索引元素完全相等, 它们也是不相等的
举个栗子:
- var o = {
- x:1
- }, p = {
- x:1
- }; // 具有相同属性的两个对象
- o == p // => false: 两个单独的对象永不相等
- var a = [], b = []; // 两个单独的空数组
- a == b // => false: 两个单独的数组永不相等
我们通常将对象称为引用类型 (reference type), 以此来和 JavaScript 的基本类型区分开来. 对象值都是引用 (reference), 对象的比较均是引用的比较: 当且仅当它们引用同一个基对象时, 它们才相等.
举个栗子:
- var a = []; // 定义一个引用空数组的变量 a
- var b = a; // 变量 b 引用同一个数组
- b[0] = 1; // 通过变量 b 来修改引用的数组
- a[0] // => 1: 变量 a 也会修改
- a === b // => true:a 和 b 引用同一个数组, 因此它们相等
来源: http://www.bubuko.com/infodetail-3149060.html