美文网首页
Object.create(null)与对象字面量{}

Object.create(null)与对象字面量{}

作者: vincent_z | 来源:发表于2023-10-18 16:56 被阅读0次

区别

  1. 原型链: Object.create(null) 创建的对象没有原型链,它是一个纯粹的空对象,没有继承任何属性或方法。而对象字面量 {} 创建的对象会继承自 Object.prototype,它包含一些常见的属性和方法,例如 toStringhasOwnProperty 等。
const obj1 = Object.create(null);
const obj2 = {};

console.log(Object.getPrototypeOf(obj1));  // null
console.log(Object.getPrototypeOf(obj2));  // {}
  1. 属性访问: 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]
  1. 内建属性和方法: Object.create(null) 创建的对象没有内建属性和方法,例如 toStringvalueOf 等。这意味着你不能直接使用这些内建方法,除非你手动为对象添加相应的属性和方法。对象字面量 {} 创建的对象会继承内建属性和方法,因此可以直接使用这些方法。

使用场景

使用 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) 还是对象字面量 {} 创建对象。

相关文章

网友评论

      本文标题:Object.create(null)与对象字面量{}

      本文链接:https://www.haomeiwen.com/subject/aojcidtx.html