美文网首页
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