Learning JavaScript? Download my free JavaScript Handbook 🔥

This method returns all own (non-inherited) properties descriptors of an object.

Object.getOwnPropertyDescriptors(obj) accepts an object, and returns a new object that provides a list of the descriptors.


const dog = {}
Object.defineProperties(dog, {
  breed: {
    value: 'Siberian Husky'
  breed: {
    value: 'Siberian Husky',
    writable: false,
    enumerable: false,
    configurable: false

There is one use case that makes this property very useful. ES2015 gave us Object.assign(), which copies all enumerable own properties from one or more objects, and return a new object. However there is a problem with that, because it does not correctly copies properties with non-default attributes.

If an object for example has just a setter, it’s not correctly copied to a new object, using Object.assign(). For example with this object:

const person1 = {
  set name(newName) {

This copy attempt won’t work:

const person2 = {}
Object.assign(person2, person1)

But this will work and copy over the setter correctly:

const person3 = {}

As you can see with a console test:

person1.name = 'x'

person2.name = 'x'

person3.name = 'x'

person2 misses the setter, it was not copied over.

The same limitation goes for shallow cloning objects with Object.create().


Follow my new project: From Zero to App

A video-based learning project where I create a React + GraphQL app from idea to deployment! 9 free videos already out!