<div dir="ltr">point of views I guess, you could fix forever the inconsistency via<div><br></div><div>```js</div><div>Number.prototype[<span style="font-size:12.8000001907349px">Symbol.</span><span style="font-size:12.8000001907349px">hasInstance</span>] = function () {</div><div>  return typeof this.valueOf() === 'number';</div><div>};</div><div>```</div><div><br></div><div>and fix String, Boolean, Symbol too (why not) and whatever else. `instanceof` is the new `typeof` ^_^ (naa, just joking)</div><div><br></div><div>Best Regards</div><div><br></div><div><br></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Mon, Jun 15, 2015 at 7:39 PM, Bradley Meck <span dir="ltr"><<a href="mailto:bradley.meck@gmail.com" target="_blank">bradley.meck@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Yes, with regards to O being an Object.<div><br></div><div>This seems a bit strange to me since things like:<br><br>```<br>Number.prototype.toString = function () {return 'overriden';}</div><div><br></div><div>(1)+'' // "1"</div><div><br><br></div><div>String(1) // "1"</div><div><br></div><div>(1).toString() // "overriden"</div><div>```</div><div><br></div><div>Implicit string coercion does not box the object.</div><div>String constructor does not box the object.</div><div><br></div><div>Only the `.` operator which requires an Object boxes the object.</div><div><br></div><div>`instanceof` works on non-objects but I think is the only case of an operator working on both primitives and objects causing boxing.</div><div><br></div><div>Is there a reason constructors could/should be allowed to override `instanceof` for primitives? This just seems odd to have this cause boxing while `1 instanceof Number` is `false`.</div><div><br></div></div><div class="HOEnZb"><div class="h5"><div class="gmail_extra"><br><div class="gmail_quote">On Mon, Jun 15, 2015 at 12:20 PM, Kevin Smith <span dir="ltr"><<a href="mailto:zenparsing@gmail.com" target="_blank">zenparsing@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div class="gmail_quote"><span><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><a href="https://people.mozilla.org/~jorendorff/es6-draft.html#sec-instanceofoperator" target="_blank">https://people.mozilla.org/~jorendorff/es6-draft.html#sec-instanceofoperator</a> calls GetMethod on C without checking if it is an Object, this means `1 instanceof Foo` could be affected by mutating `Number.prototype[Symbol.hasInstance]`.</div></blockquote><div><br></div></span><div>I assume you mean "without checking if O is an object"</div><span><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div>I am assuming this is unintended?</div></div></blockquote><div><br></div></span><div>IIUC the point of @@hasInstance is to allow the programmer to define completely arbitrary semantics for "instanceof" when applied to "C", even if C is a built-in.  Do you see a problem with this behavior?</div><div><br></div></div></div>
</blockquote></div><br></div>
</div></div><br>_______________________________________________<br>
es-discuss mailing list<br>
<a href="mailto:es-discuss@mozilla.org">es-discuss@mozilla.org</a><br>
<a href="https://mail.mozilla.org/listinfo/es-discuss" rel="noreferrer" target="_blank">https://mail.mozilla.org/listinfo/es-discuss</a><br>
<br></blockquote></div><br></div>