Typeof this in getters (was: eval on non-strings)

Dave Fugate dfugate at microsoft.com
Tue Feb 28 16:13:57 PST 2012


To clarify, the expected results here are:
Non-strict
Typeof this inside a function when called on a number: object
Typeof this inside an Object.prototype getter when used on a number: object
Strict
Typeof this inside a function when called on a number: number
Typeof this inside an Object.prototype getter when used on a number: number
right?

There's over a hundred test cases that have already been created, and will be contributed 'soon' to cover https://bugs.ecmascript.org/show_bug.cgi?id=180.  One such test case is:
  function foo()
  {
    'use strict';
    return typeof(this);
  }
  function bar()
  {
    return typeof(this);
  }
  return foo.call(1) === 'number' && bar.call(1) === 'object';


Another that seem relevant here is:
function testcase() {
var o = {};
Object.defineProperty(o, "foo", { get: function() { "use strict"; return this; } });
return o.foo===o;
}
On that note, is there anything that's particularly interesting spec-wise in defining foo on Object.prototype instead of a generic object and validating there?

Thanks!

Dave

From: es-discuss-bounces at mozilla.org [mailto:es-discuss-bounces at mozilla.org] On Behalf Of Mark S. Miller
Sent: Tuesday, February 28, 2012 3:45 PM
To: Domenic Denicola
Cc: es-discuss at mozilla.org; Brendan Eich
Subject: Re: Typeof this in getters (was: eval on non-strings)


On Tue, Feb 28, 2012 at 3:38 PM, Domenic Denicola <domenic at domenicdenicola.com<mailto:domenic at domenicdenicola.com>> wrote:
Both IE10 Developer Preview (10.0.8102.0) and IE10 Platform Preview 4 (10.0.8103.0) output

   number      object
   object        object

We'll see if tomorrow's drop does any better.

Sounds like I should file test262 bugs as well.

Oops. I meant for

    Yes, thanks!

to be placed here. Yes, thanks for filing test262 bugs as well.



From: Mark S. Miller [mailto:erights at google.com<mailto:erights at google.com>]
Sent: Tuesday, February 28, 2012 14:38
To: Domenic Denicola
Cc: Allen Wirfs-Brock; Brendan Eich; es-discuss at mozilla.org<mailto:es-discuss at mozilla.org>
Subject: Re: Typeof this in getters (was: eval on non-strings)

I like the output display on http://jsfiddle.net/CxdMs/16/ a bit better. I just tried it on very recent versions of 4 or the 5 major browsers. I was shocked to see that all of them were wrong.

Correct would be

    number      number
    object        object

Chrome 19 gave

    number      number
    object        number

Opera 12, Safari WebKit 5.1.3 (7534.53.10, r109097), and Mozilla FF Nightly 13 all gave

    number      object
    object        object

What does the latest IE10 preview do?

Domenic, as you post bugs against the browsers, please send me the URLs. Thanks.


On Tue, Feb 28, 2012 at 10:03 AM, Domenic Denicola <domenic at domenicdenicola.com<mailto:domenic at domenicdenicola.com>> wrote:
> 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:

http://jsfiddle.net/CxdMs/15/

It seems reasonably clear that the result for functions should be object (non-strict)/number (strict), according to section 10.4.3.

But for getters, the major browsers disagree, and my spec-fu can't find anything besides the abovementioned section. Firefox and IE9 say object/object, while V8 says number/number. And at least one version of JavaScriptCore we have lying around says number/object. If someone could walk me through the spec correctly, I'd be happy to file appropriate browser bugs.

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:

https://github.com/logicalparadox/chai/issues/32

Thanks all,
Domenic
_______________________________________________
es-discuss mailing list
es-discuss at mozilla.org<mailto:es-discuss at mozilla.org>
https://mail.mozilla.org/listinfo/es-discuss




--
    Cheers,
    --MarkM



--
    Cheers,
    --MarkM
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.mozilla.org/pipermail/es-discuss/attachments/20120229/3f85eff8/attachment.html>


More information about the es-discuss mailing list