JavaScript-随笔-new-Object-vs-Objectcreate

60次阅读

共计 1100 个字符,预计需要花费 3 分钟才能阅读完成。

直接上代码及比较结果吧,后续再补充:

// 对象构建:
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

正文完
 0