On 10/21/07, Jeff Dyer <[EMAIL PROTECTED]> wrote:
>
> On 10/21/07 10:03 AM, liorean wrote:
>
> > On 21/10/2007, [EMAIL PROTECTED] <[EMAIL PROTECTED]> wrote:
> >> var a;
> >> a= {};
> >> a instanceof Object //true
> >> a= [];
> >> a instanceof Array //true
> >> a='asdf';
> >> a instanceof String //false
> >> a= 7;
> >> a instanceof Number //false
> >>
> >> Why?
> >
> > Because those are primitives of type double and string respectively.
> > They are not instances of any of the compound types Object, String or
> > Number.
> >
> > Something silly that JavaScript inherited from Java that the world
> > would be much better off without, but as I understand it won't be
> > corrected because of real world compatibility problems.
>
> This problem is fixed by the addition of the 'is' operator in ES4. Replace
> 'instanceof' with 'is' in all of the above, and the result will be true in
> each case. You correctly point out that 'instanceof' is terminally broken
> for compatibility's sake.I don't think "is" fixes it, because "string" is not a subclass of "String" (for compatibility reasons) and "abcd" is "string". However, "abcd" is string => true "abcd" instanceof string => true The wrapper classes String, Number, Boolean are similar to the (primitive) values they wrap, but they're not really related to those value types in a type sense, and in ES4 the wrappers are of even less utility than in ES3, I would say. --lars _______________________________________________ Es4-discuss mailing list [email protected] https://mail.mozilla.org/listinfo/es4-discuss
