On Sat, Sep 21, 2013 at 6:09 PM, Tim Caswell <t...@creationix.com> wrote:
> If you really want a safe map where any key is allowed and doesn't conflict
> with builtin javascript properties, just implement your own map.  Here is a
> very simple one that allows storing *any* value as keys.  This includes the
> string "__proto__" as well as non-strings.
>
> If you want something faster and your pretty sure that "__proto__" will
> never be used as a key and all other keys are strings, then use native
> objects with Object.create(null).  Mostly safe is good enough for a large
> number of cases.  Including generating prime numbers for RSA private keys
> for your online bank.
>
> function map() {
>   var keys = [];
>   var values = [];
>   return { get: get, set: set };
>   function get(key) {
>     return values[keys.indexOf(key)];
>   }
>   function set(key, value) {
>     var index = keys.indexOf(key);
>     if (index < 0) {
>       index = keys.length;
>       keys[index] = key;
>     }
>     return values[index] = value;
>   }
> }

That's O(n) lookup time though - rather worse than the O(log n) or
O(1) characteristics of a JS dictionary.

A common trick is to use a normal dictionary but only access it with
custom getters and setters that auto-prefix keys with (for example)
'x'.  That way, '__proto__' becomes 'x__proto__' and that's safe.

-- 
-- 
Job Board: http://jobs.nodejs.org/
Posting guidelines: 
https://github.com/joyent/node/wiki/Mailing-List-Posting-Guidelines
You received this message because you are subscribed to the Google
Groups "nodejs" group.
To post to this group, send email to nodejs@googlegroups.com
To unsubscribe from this group, send email to
nodejs+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/nodejs?hl=en?hl=en

--- 
You received this message because you are subscribed to the Google Groups 
"nodejs" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to nodejs+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.

Reply via email to