<div class="gmail_quote">On Tue, Feb 28, 2012 at 2:18 PM, Allen Wirfs-Brock <span dir="ltr"><<a href="mailto:allen@wirfs-brock.com" target="_blank">allen@wirfs-brock.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word"><br><div><div><div><div>On Feb 28, 2012, at 9:20 AM, Mark S. Miller wrote:</div>
<br><blockquote type="cite">On Tue, Feb 28, 2012 at 7:54 AM, Allen Wirfs-Brock <span dir="ltr"><<a href="mailto:allen@wirfs-brock.com" target="_blank">allen@wirfs-brock.com</a>></span> wrote:<div>[...]<br><div class="gmail_quote">

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
There is also a matter of maintaining internal insistency within a language. [...] JS generally converts primitive values to wrapper objects whenever one is used in a context that requires an object. [...]</blockquote><div>


<br></div><div>Some other violations of this rule that surprised me when I first came across them:</div><div><br></div></div></div><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><div><div class="gmail_quote">


<div style="white-space:pre-wrap;font-family:Times;font-size:medium"><div style="color:blue;font:inherit;margin-top:0.5em;font-weight:bold;background-repeat:initial initial;background-image:initial">
> 3 instanceof Number</div></div></div></div><div><div class="gmail_quote"><div style="white-space:pre-wrap;font-family:Times;font-size:medium"><div style="background-image:initial">
false</div></div></div></div><div><div class="gmail_quote"><div style="white-space:pre-wrap;font-family:Times;font-size:medium"><div style="color:blue;font:inherit;margin-top:0.5em;font-weight:bold;background-repeat:initial initial;background-image:initial">


> 'x' in 3</div></div></div></div><div><div class="gmail_quote"><div style="white-space:pre-wrap;font-family:Times;font-size:medium"><div style="color:red;background-repeat:initial initial;background-image:initial">


TypeError: Cannot use 'in' operator to search for 'x' in 3</div></div></div></div><div><div class="gmail_quote"><div> </div></div></div></blockquote><div><div>I am not suggesting that we do anything to repair these -- it is likely too late. But depending on how many other such irregularities there are, it may not altogether be clear which direction the principle of least surprise should take us.</div>

</div></blockquote><div><br></div></div></div><div>Both of these were added to the spec. in ES3.  They are probably exactly the sort of thing I was warning against when I mentioned point in time or spec. writer  introduced inconsistencies.  Since exceptions were also spec'ed in ES3 I bet whoever spec'ed in and instanceof thought that throwing would be the "right thing" and perhaps didn't even think about maintaining consistency with the language's legacy.  who knows...</div>

<div><br></div><div>Since, in and instanceof currently throw in the above situations we probably could get away with changing them to do ToObject.  Not necessarily saying we should, but it probably wouldn't break anything.  It would be a set towards  maintaining internal consistency. </div>
</div></div></blockquote><div><br></div><div>Fixing "in" would be be great if we can. But the "instanceof" example above correctly does not throw, it returns false, which we should assume we cannot fix. "instanceof" does throw if its <i>right</i> operand is not an object with a [[HasInstance]] method. Is that the case you have in mind?</div>
</div><div><br></div>-- <br>    Cheers,<br>
    --MarkM<br>