for own(...) loop (spin-off from Re: for..in, hasOwnProperty(), and inheritance)

Andy Earnshaw andy at intelligroup.eu
Wed Nov 9 15:38:25 PST 2011


Should ES.next provide sugar for the recommended pattern? To make it compose
with declarations and destructuring in the for head, it should use a
contextual keyword immediately after 'for':

 

  for own (i in o) {

    body

  }

 

This is a small thing but it might pay off in the long run.

 

I was thinking of raising a similar suggestion, but I wasn't sure when to
jump in and bring it up.  However, I think it could be more useful to
introduce another operator like `in` as syntactic sugar for `hasOwnProperty`
and have it work in a `for` loop similar to how `for...in` works too.

 

  /* Desugared property check -> */ o.hasOwnProperty(prop)

  /* Sweetened property check -> */ prop on o

 

  /* Desugared loop -> */ for (i in o) { if o.hasOwnProperty(i) { ... }

  /* Sweetened loop -> */ for (i on o) { ... }

 

I could see it being useful as an operator in situations where you might
have an object map:

 

  var obj = { key1: val1, key2: val2 }

 

  if ("key1" on obj) {                  

     // ...

  }

 

I think Dr Rauschmayer mentioned Python's `on` and I think it fits in here
quite nicely.  `in` for anywhere in the chain, `on` for direct properties.
If it's a little too close for comfort, you could stick with `own` or
reverse the operands and call it `hasown`.  Perhaps that would seem too
inconsistent, though.  Overall, I think it's a great idea.  It's fairly
common for developers to forget to do a `hasOwnProperty` check when
enumerating.  As for `Object.keys(o).forEach()`, the speed just doesn't
compare and it doesn't look too great.

 

Andy Earnshaw

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.mozilla.org/pipermail/es-discuss/attachments/20111109/63d23b41/attachment.html>


More information about the es-discuss mailing list