https://mysteryweevil.medium.com/mastering-javascript-complex-data-types-a-practical-guide-c2da507883d6