The difference between two that Object.create(Animal.prototype) will not invoke constructor and thus will not create an instance. I absolutely have no idea how anyone might find it better in any any way, in fact it’s somewhat suicidal, because it clearly won’t be an instance, but following will be true, which is bollocks:
animal instanceof Animal; /* true .... SAY WHAAAT??? */
Spoiler alert: in the next challenge you will be shown somewhat shady example of how not running constructor but inheriting prototype might be useful - when you want to “append” random object into inheritance chain. I really really struggle to understand why would someone do that either, so if anyone has any clues - go ahead!
You definitely should create instances using new operator, it is not even a matter of disadvantages rather it is the only correct way of doing it.
Isn’t new Animal() the same as Object.create(Animal.prototype), since the new operator is supposed to create a new object instance that inherits from Animal.prototype?
Object.create(Animal.prototype) would be the first step when you use new operator, but new keyword will also run constructor function on top. So by former option you will only do a half of work to create an instance - JS still considers these unfinished instances as instances, as it only cares whether they are in prototype chain or not. This approach will bite on every occasion: