I got a surprise today and I couldn't find the appropriate part of the specification to find out whether this was to be expected or not. My money is on that there's nothing wrong with the universe but what are the rules that make this expression evaluate to false
(function(){ return this;}).call(1) === 1
In "loose" mode the value of
this
is always coerced to an object. Values of type Object are not (strict) equal to values of type Number (or any other type for that matter):From the spec: