直接上代码及比较结果吧,后续再补充:
// 对象构建:
var obj1 = {name:'hx'};
var obj2 = new Object({name:'hx'});
var obj3 = new Object(obj1);
var obj4 = Object.create({name:'hx'});
var obj5 = Object.create(obj1);

// 对象比较:
obj1 === obj2; // false
obj1 === obj3; // true (只此一个例外)
obj2 === obj3; // false

obj1 === obj4; // false
obj1 === obj5; // false
obj2 === obj4; // false
obj2 === obj5; // false

obj4 === obj5; // false

// 原型对象比较:
obj1.__proto__ === obj2.__proto__; // true
obj2.__proto__ === obj3.__proto__; // true

obj1.__proto__ === obj4.__proto__; // false
obj1.__proto__ === obj5.__proto__; // false
obj2.__proto__ === obj4.__proto__; // false
obj2.__proto__ === obj5.__proto__; // false

obj4.__proto__ === obj5.__proto__; // false
结论:
  • 引用类型比较的是内存地址,因此有:

    • {a:1} === {a:1}; // false
  • var a = {}是一种语法糖,相当于var a = new Object({}),因此:

    • ({x:1}).__proto__.constructor === Object; // true
    • (new Object({y:2})).__proto__.constructor === Object; // true
  • Object.create创建的是一个“空”对象,不继承Object的属性和方法,因此:

    • (Object.create(null)).__proto__; // undefined
    • (Object.create({})).__proto__.hasOwnProperty('__proto__'); // false
    • (new Object({})).__proto__.hasOwnProperty('__proto__'); // true
    • (Object.create({})).__proto__.__proto__.__proto__; // null
    • (new Object({})).__proto__.__proto__; // null

時雨
91 声望6 粉丝

慢慢地把云笔记上的内容搬过来~