On Jun 15, 2015, at 10:06 AM, Bradley Meck wrote: > Kyle Simpson caused the discovery of this oddity : > > https://people.mozilla.org/~jorendorff/es6-draft.html#sec-instanceofoperator > 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]`. > > I am assuming this is unintended?
No, it is exactly as intended: GetMethod users GetV http://people.mozilla.org/~jorendorff/es6-draft.html#sec-getv which handles accessing properties for primitives. For primitive values, it uses the built-in wrapper prototype to lookup properties, but it does not actually create a boxed primitive value. `this` object boxing is a characteristic of the callee, not the caller. Non-srict functions box primitive `this values` that are passed to them, strict mode functions do not. This is all the standard method invocation behavior, and the `instanceof` operator just does a normal method invocation if it finds a `Symbol.hasInstance` method. Because Function.prototype implements `Symbol.hasInstacce` all function haves the default legacy behavior when appearing right-side operand of `instanceof` But `instanceof` does not depend upon the existence of a a `Symbol.hasInstance` method. It falls back to performing the default (legacy) instanceof check if a callable `hasInstance` property value is not found. But, back to the original question: Exactly what do you expect to be boxed for `1 instance of Foo`? The `C` that GetMethod is applied to is `Foo` which would normally be a constructor or some other "type-like" object implements. It could be a primitive numeric value (eg, `5 instanceof 4`) which will cause the fallback to be taken using Number.prototype has a `Symbol.hasInstance` callable property. But, even if it does why would you expect anything to box? Allen
_______________________________________________ es-discuss mailing list [email protected] https://mail.mozilla.org/listinfo/es-discuss

