Proposal: allow primitives to be explicitly returned from constructors

Isiah Meadows isiahmeadows at
Fri Apr 20 15:31:30 UTC 2018

I normally name it `isReferenceType` or similar, but was just reusing
the name originally used here. For the purposes of this, my
`isReferenceType` is equivalent to the `value === new function () {
return value }` check, while still avoiding diving into builtins. I
was just focused on a correct equivalent.

I know `typeof` can be rather loose at times with old IE (and heck, it
once was in other engines, too - consider the old V8 bug `typeof /foo/
=== "function"`).

My question was whether it was feasible *now*, and specifically with
respect to non-primitives (where `isReferenceType(value) === false`).
So far, the only problem explained here was with a fairly unique use
case I offered an alternative of, and I'm just trying to explore to
see if the breaking nature has changed enough it's worthy to consider
lifting the restriction.


Isiah Meadows
me at

Looking for web consulting? Or a new website?
Send me an email and we can get started.

On Fri, Apr 20, 2018 at 9:46 AM, T.J. Crowder
<tj.crowder at> wrote:
> On Fri, Apr 20, 2018 at 2:23 PM, Oriol _
> <oriol-bugzilla at> wrote:
>> No, `typeof` is not reliable, because it's implementation-defined
>> for non-standard non-callable exotic objects.
>> For example, old IE used to return `"unknown"` in various cases.
> Also `"object"` for host-provided functions (such as
> `document.createElement`); IE8 still does that. (Thankfully IE11 doesn't.)
> (I suppose that would have passed Isiah's `isObject` test anyway, but the
> point is that `typeof` is, sadly, a weak reed...)
> -- T.J. Crowder
> _______________________________________________
> es-discuss mailing list
> es-discuss at

More information about the es-discuss mailing list