共计 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
正文完
发表至: javascript
2019-09-17