object.create(null) 和 {}创建对象的区别

原文

  简书原文:https://www.jianshu.com/p/43ce4d7d6151

创建对象的方法

  如果要创建一个空的对象,可以使用如下的三种方法

var obj1 = {};
var obj2 = Object.create(null);
var obj3 = new Object();

创建空对象的区别

  要创建一个干净的空对象,应该使用Object.create(null)而不是剩下两种。
  通过做Objist.create(NULL),我们显式指定NULL作为它的原型。所以它绝对没有属性,甚至没有构造函数、toString、hasOwnProperty属性,所以如果需要的话,可以在数据结构中使用这些键,而不需要通过hasOwnProperty进行判断。

var obj1 = {};
var obj2 = Object.create(null);
var obj3 = new Object();

var con1 = obj1.constructor;
var con2 = obj2.constructor;
var con3 = obj3.constructor;

console.log(con1);//? Object() { [native code] }
console.log(con2);//undefined
console.log(con3);// Object() { [native code] }

实例说明

const dirtyMap = {};
const cleanMap = Object.create(null);
const key;
for(key in dirtyMap){
  // Check to avoid iterating over inherited properties.
  //不纯净的对象是需要做判断的
  if (dirtyMap.hasOwnProperty(key)) {
    console.log(key + " -> " + dirtyMap[key]);
  }
}

for(key in cleanMap){
  // No need to add extra checks, as the object will always be clean
  //纯净的对象不需要做判断
  console.log(key + " -> " + cleanMap[key]);
}

  

原文地址:https://www.cnblogs.com/shcrk/p/9302572.html

时间: 2024-08-30 07:30:23

object.create(null) 和 {}创建对象的区别的相关文章

Object.create(null)、Object.create({})、{} 三者创建对象的区别

参考 1.先看看我们经常使用的{}创建的对象是什么样子的: var o = {a:1}; console.log(o) 从上图可以看到,新创建的对象继承了Object自身的方法,如hasOwnProperty.toString等,在新对象上可以直接使用. 2.再看看使用Object.create()创建对象: var o = Object.create(null,{ a:{ writable:true, configurable:true, value:'1' } }) console.log(

Object.create(null)

使用Object.create(null)产生的对象是一个没有原型的对象,相对于直接使用 {} 产生的对象,后者会产生一个原型链接到Object.prototype,前者相当于一个纯净的map不会有Object.prototype的属性或者方法污染,自然前者遍历的时候也不需要使用hasOwnProperty来判断当前属性是否为自有的. Object.create函数的作用就是创建一个对象,并且让对象的原型为函数提供的参数.null作为一个对象,它是Object.prototype的原型,通过下面

javascript:利用Object.create()方法创建对象

在javascript里面,我们知道有两种常见的创建对象的方法,一种是使用对象直接量: 对象直接量是由若干值/键对组成的映射表,值/键对用逗号”,“分隔开,整个部分用花括号”{}“括起来. 例如: var empty={}; var people = { name:'kobe', age:'34' }; 另外一种方法是通过new创建对象:在new后面使用一个函数调用,这个函数也成为构造函数,通过new来初始化一个新的对象. 例如: var arr = new Array(); var date

Object.create()和new object()和{}的区别

Object.create()介绍Object.create(null) 创建的对象是一个空对象,在该对象上没有继承 Object.prototype 原型链上的属性或者方法,例如:toString(), hasOwnProperty()等方法 Object.create()方法接受两个参数:Object.create(obj,propertiesObject) ; obj:一个对象,应该是新创建的对象的原型. propertiesObject:可选.该参数对象是一组属性与值,该对象的属性名称将

js 中 new 与 Object.create()的区别

前言 在js中,创建对象有三种方式 {} // 对象字面量 new Object() Object.create() 1和2的区别很小,1不能传参,2可以传参. new Object() 和Object.create() 区别就比较大了 1. new关键字 new 关键字做了几件事 创建一个新对象 将新对象的原型指向构造函数的原型 执行构造函数,绑定this 返回这个对象 比如创建一个Car对象,伪代码 // new Car() var obj = new Object() obj._proto

使用 Object.create 创建对象,super 关键字,class 关键字

ECMAScript 5 中引入了一个新方法:Object.create().可以调用这个方法来创建一个新对象.新对象的原型就是调用 create 方法时传入的第一个参数: var a = {a: 1}; // a ---> Object.prototype ---> null var b = Object.create(a); // b ---> a ---> Object.prototype ---> null console.log(b.a); // 1 (继承而来)

firefox-Developer开发者站点——关于Object.create()新方法的介绍

https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Object/create Object.create() 方法创建一个拥有指定原型和若干个指定属性的对象. 语法 Object.create(proto, [ propertiesObject ]) 参数 proto 一个对象,作为新创建对象的原型. propertiesObject 可选.该参数对象是一组属性与值,该对象的属性名称将

前端开发者进阶之ECMAScript新特性--Object.create

前端开发者进阶之ECMAScript新特性[一]--Object.create Object.create(prototype, descriptors) :创建一个具有指定原型且可选择性地包含指定属性的对象 参数:prototype 必需.  要用作原型的对象. 可以为 null.descriptors 可选. 包含一个或多个属性描述符的 JavaScript 对象."数据属性"是可获取且可设置值的属性. 数据属性描述符包含 value 特性,以及 writable.enumerab

Object.create(): the New Way to Create Objects in JavaScript

There are a lot of ways to create Objects in JavaScript, perhaps even more to integrate inheritance into them. Just when you thought that you've seen every possible way to create JS objects, I'm here to announce that there's yet another: the new Obje