I have seen objects being created this way:
const obj = new Foo;
But I thought that the parentheses are not optional when creating an objec
https://people.mozilla.org/~jorendorff/es6-draft.html#sec-new-operator-runtime-semantics-evaluation
Here's the part of the ES6 spec that defines how the two variants operate. The no-parentheses variant passes an empty argument list.
Interestingly, the two forms have different grammatical meanings. This comes up when you try to access a member of the result.
new Array.length // fails because Array.length is the number 1, not a constructor
new Array().length // 0