Separating a Hash type from Object

Brendan Eich brendan at
Tue May 1 18:36:44 PDT 2007

On Apr 30, 2007, at 2:43 PM, Andrew Dupont wrote:

> However, it doesn't fix the lack of key safety.
> var foo = {};
> foo + ""; //-> "[object Object]"
> foo.toString = "bar";
> foo + ""; //-> Error: Can't convert foo to primitive type
> This bothers me.  The original "toString" property can still be
> accessed with an intrinsic:call, but that doesn't help with the
> automatic string coercion in the example above.

use namespace intrinsic;

does help there.

> I think this has been discussed before on this ML, but nobody has
> come up with an easy answer here.  Ideally, speaking from a narrow
> perspective, I'd like to be able to distinguish dot notation from
> bracket notation...
> foo["toString"]; //-> "bar";
> foo.toString;     //-> function() {}
> ... but I fear that's too large a can of worms to open.

How about a magic namespace:["toString"]

or some such? Then 'use namespace direct' would result in foo.toString 
() or an implicit conversion failing if there were a 
["toString"]. So a magic namespace may be the wrong UI. How about  
special syntax?


and of course

let dict = #{a:1, b:2, c:3};



More information about the Es4-discuss mailing list