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

Reply via email to