typeof is very often useful - the only case where it can be arguably considered "broken" is with null.
The reason `instanceof` is unreliable is indeed because [[Prototype]]s are mutable - eg `({ __proto__: Array.prototype }) instanceof Array` - but also because it returns a false negative when compared with builtins from different realms (which is why `Array.isArray` is needed. If the ability you're talking about is to freeze the [[Prototype]] slot on an object without fully freezing, sealing, or preventing extensions, that is something a future proposal is very likely to add. On Sat, Jul 27, 2019 at 2:06 PM Ranando King <king...@gmail.com> wrote: > What good is the reliability of something that is more often than not > useless? > > Should there be a typeof hook like Symbol.hasInstance? No. `instanceof` > was always sketchy due to the ability to exchange prototypes on an object. > When `class` came along, it became effectively broken since `class` > provides no facility for transfixing the prototype attached to an instance. > > On the other hand, `typeof` never had such issues. Unfortunately, when > `class` came along, nothing was done to allow `typeof` to treat classes as > unique types. That was disappointing. However, adding a hook means that > `typeof` would lose its stability and predictability, making it essentially > as useless as `instanceof`. If instead, the two changes I just mentioned > were made, then `typeof` would even be able to supplant `instanceof` > without losing any of its reliability. Just a thought... > > On Sat, Jul 27, 2019 at 3:57 PM Jordan Harband <ljh...@gmail.com> wrote: > >> With something that while unintuitive in one case, is eternally robust >> and reliable. >> >> If you want extensibility, define Symbol.toStringTag on your objects. >> >> On Sat, Jul 27, 2019 at 1:23 PM Michael Haufe <t...@thenewobjective.com> >> wrote: >> >>> If it's unfixably broken[1], non-extensible, excessively vague, and >>> non-orthogonal, where does that leave you? >>> >>> >>> >>> [1] <https://twitter.com/BrendanEich/status/798317702775324672> >>> >>> >>> >>> *From:* Jordan Harband <ljh...@gmail.com> >>> *Sent:* Saturday, July 27, 2019 3:00 PM >>> *To:* Michael Haufe <t...@thenewobjective.com> >>> *Cc:* ViliusCreator <viliuskubilius...@gmail.com>; >>> es-discuss@mozilla.org >>> *Subject:* Re: Proposal: Typeof Trap >>> >>> >>> >>> Those two PRs are about removing implementation-defined behavior from >>> `typeof`, making it *more* reliable - there is no trend away from using and >>> relying on `typeof`, full stop. >>> >>> >>> >>> `Symbol.hasInstance` is a part of why `instanceof` is actually >>> unreliable - because user code can hook into it. It would be a massive loss >>> imo if `typeof` lost its bulletproof status by adding a user hook. >>> >>> >>> >>> On Sat, Jul 27, 2019 at 12:37 PM Michael Haufe <t...@thenewobjective.com> >>> wrote: >>> >>> The trend seems to be to rely on typeof less and less as time passes: >>> >>> >>> >>> From the March 2019 Agenda < >>> https://github.com/tc39/agendas/blob/274e49412c09f81a0a82f386e6eead481c69adad/2019/03.md >>> >: >>> >>> >>> >>> “Implementation-defined typeof still necessary?” < >>> https://github.com/tc39/ecma262/issues/1440> >>> >>> “Normative: Remove implementation-defined typeof behavior” < >>> https://github.com/tc39/ecma262/pull/1441> >>> >>> >>> >>> >>> >>> The only real discussion around this I can find is from a related >>> proposal from Brendan Eich a few years ago: >>> >>> >>> >>> >>> https://esdiscuss.org/topic/typeof-extensibility-building-on-my-value-objects-slides-from-thursday-s-tc39-meeting >>> >>> >>> >>> >>> >>> >>> >>> *From:* ViliusCreator <viliuskubilius...@gmail.com> >>> *Sent:* Saturday, July 27, 2019 2:04 PM >>> *To:* Michael Haufe <t...@thenewobjective.com> >>> *Subject:* RE: Proposal: Typeof Trap >>> >>> >>> >>> *Yes, but it traps `typeof `, not `instanceof`. There’s difference >>> there.* >>> >>> _______________________________________________ >>> es-discuss mailing list >>> es-discuss@mozilla.org >>> https://mail.mozilla.org/listinfo/es-discuss >>> >>> _______________________________________________ >> es-discuss mailing list >> es-discuss@mozilla.org >> https://mail.mozilla.org/listinfo/es-discuss >> >
_______________________________________________ es-discuss mailing list es-discuss@mozilla.org https://mail.mozilla.org/listinfo/es-discuss