#2 isn't always true, for example in the case of XML. Here's the idiom I use
for pulling elements out of an XML document:

if (xml.myTag) myValue = xml.myTag;

Is that a decent idiom? Also, if the return type is Object, won't the
compiler allow you to access any property with '.' notation? For example, I
use Objects for key/value pairs all over my code using code like Number(
myObject.myProperty) where "myProperty" is most certainly not known at
compile time (it's dynamically generated through several API's).

Troy.


On 5/24/07, Gordon Smith <[EMAIL PROTECTED]> wrote:

   I'd argue that best-practice is #4, the 'in' operator.

#1 is Ecmascript legacy useful for prototype-based inheritence, to tell
whether an object has the property or one farther up its prototype chain.
Flex makes almost no use of prototype-based inheritence.

#2 isn't useful because if it compiles, the property definitely exists.

#3 can be misleading because you can't distinguish between the property
not existing and the property containg a value which coerces to false.

- Gordon

 ------------------------------
*From:* [email protected] [mailto:[EMAIL PROTECTED] *On
Behalf Of *Troy Gilbert
*Sent:* Thursday, May 24, 2007 11:19 AM
*To:* [email protected]
*Subject:* Re: [flexcoders] Checking if an Object has as property/element

 Interesting, I've never seen that one, Alex... nicely expressive.

So, in summary, one can test the existent of a property with:

if (myObject.hasOwnProperty("property")) ...
if (myObject.property ) ...
if (myObject["property"]) ...
if ("property" in myObject) ...

The first one is a function returning a Boolean. Obvious.

The second and third ones return the actual values, which implicitly
convert to true (for everything but null and "", which implicitly convert to
false), or if the property doesn't exist returns undefined, which implicitly
converts to false.

The fourth one... well, that's basically identical to the first one where
it returns a Boolean.

Troy.


On 5/24/07, Alex Harui < [EMAIL PROTECTED]> wrote:
>
>   if ("blah" in Object)
>
> Should also work
>
>
> -----Original Message-----
> From: [email protected] <flexcoders%40yahoogroups.com> 
[mailto:[email protected]<flexcoders%40yahoogroups.com>]
> On
> Behalf Of Tom Chiverton
> Sent: Thursday, May 24, 2007 6:53 AM
> To: [email protected] <flexcoders%40yahoogroups.com>
> Subject: Re: [flexcoders] Checking if an Object has as property/element
>
> On Thursday 24 May 2007, Christopher Olsen wrote:
> > If i do if Object.blah == null i get an error because blah doesn't
> exist
>
> hasOwnProperty(), or just if (Object.blah)
>
> --
> Tom Chiverton
> Helping to globally maintain error-free solutions
> on: http://thefalken.livejournal.com
>
> ****************************************************
>
> This email is sent for and on behalf of Halliwells LLP.
>
> Halliwells LLP is a limited liability partnership registered in England
> and Wales under registered number OC307980 whose registered office
> address is at St James's Court Brown Street Manchester M2 2JF. A list
> of members is available for inspection at the registered office. Any
> reference to a partner in relation to Halliwells LLP means a member of
> Halliwells LLP. Regulated by the Law Society.
>
> CONFIDENTIALITY
>
> This email is intended only for the use of the addressee named above and
> may be confidential or legally privileged. If you are not the addressee
> you must not read it and must not use any information contained in nor
> copy it nor inform any person other than Halliwells LLP or the addressee
> of its existence or contents. If you have received this email in error
> please delete it and notify Halliwells LLP IT Department on 0870 365
> 8008.
>
> For more information about Halliwells LLP visit www.halliwells.com.
>
> --
> Flexcoders Mailing List
> FAQ: http://groups.yahoo.com/group/flexcoders/files/flexcodersFAQ.txt
> Search Archives:
> http://www.mail-archive.com/flexcoders%40yahoogroups.com
> Yahoo! Groups Links
>
>

Reply via email to