As @Bergi says, both forms use the same internal mechanism under the hood.
First, an object literal inside a JS script is not JSON, it is an "object initializer":
// object initializer, NOT JSON
let myPet = {
species: 'Dog',
ageMs: 1000 * 60 * 60 * 24 * 365.24 * 5 // ~5 years, in millis
}
While no constructor is explicitly invoked by the literal notation, it's also not the case that the created object is just the literal properties; the JS engine still does some setup work. I've never dug into this before, but it appears that the spec calls that setup work "OrdinaryObjectCreate".
{}and thenew Objectconstructor use the same internal mechanism under their hoods.Object.prototype. It doesn't mean any constructor was invoked. You can achieve the same yourself withObject.create(Object.prototype).