Typeof this in getters (was: eval on non-strings)
domenic at domenicdenicola.com
Tue Feb 28 10:03:31 PST 2012
> Specifically regarding ToObject. It's use is important in minimizing the semantic differences between primitive values and Objects. In ES5 we eliminated the automatic wrapping of primitive values used as this values in method invocations. That means that in most cases 42 and (new Number(42)) can be used interchangeably. If we start leaving out ToObject calls in random places the distinction between a primitive value and a wrapped primitive values will start tripping people up.
This actually is apropos of something I'd been meaning to ask about. Consider the following JSFiddle:
It seems reasonably clear that the result for functions should be object (non-strict)/number (strict), according to section 10.4.3.
Note that this is a real-world issue. The Chai.js assertion library is trying to break free of V8 and become useful in browsers, but is encountering problems due to this behavior:
More information about the es-discuss