区别
-
原型链:
Object.create(null)
创建的对象没有原型链,它是一个纯粹的空对象,没有继承任何属性或方法。而对象字面量{}
创建的对象会继承自Object.prototype
,它包含一些常见的属性和方法,例如toString
、hasOwnProperty
等。
const obj1 = Object.create(null);
const obj2 = {};
console.log(Object.getPrototypeOf(obj1)); // null
console.log(Object.getPrototypeOf(obj2)); // {}
-
属性访问:
Object.create(null)
创建的对象不具备任何属性,因此无法直接访问或使用任何属性。你需要手动添加属性和方法。而对象字面量{}
创建的对象可以直接添加和访问属性,也可以使用点号或方括号语法来访问属性。
const obj1 = Object.create(null);
const obj2 = {};
obj1.name = 'John';
obj2.name = 'John';
console.log(obj1.name); // John
console.log(obj2.name); // John
console.log(obj1.toString); // undefined
console.log(obj2.toString); // [Function: toString]
-
内建属性和方法:
Object.create(null)
创建的对象没有内建属性和方法,例如toString
、valueOf
等。这意味着你不能直接使用这些内建方法,除非你手动为对象添加相应的属性和方法。对象字面量{}
创建的对象会继承内建属性和方法,因此可以直接使用这些方法。
使用场景
使用 Object.create(null)
创建的对象主要用于特定场景,例如需要一个干净的、不受原型链影响的纯粹空对象。这在某些情况下可能很有用,例如创建一个纯粹的键值对存储对象,而不希望受到原型链带来的属性污染或干扰。
const obj1 = Object.create(null);
console.log(obj1.toString); // undefined
const obj2 = {};
console.log(obj2.toString); // [Function: toString]
总结起来,Object.create(null)
创建的对象在内存占用上可能略小,并且在属性查找和方法调用方面可能稍快。但在实际应用中,这些差异通常不会对性能产生明显的影响。需要根据具体的需求来选择使用 Object.create(null)
还是对象字面量 {}
创建对象。
网友评论