You're absolutely right, and in fact I got bit by this this weekend... we have a bunch of object serialization code that uses that idiom of "if ( xml.myTag)" and it broke this weekend when we fed it XML docs that lacked tags!
Troy. On 5/25/07, Daniel Freiman <[EMAIL PROTECTED]> wrote:
The statement: if (xml.myTag) should always return true if xml is an XML object because it will return an XMLList of children with the localname of myTag. If there are no children like this, then it will still return an XMLList of length 0 which will evaluate to true. I discuss this here: http://nondocs.blogspot.com/2007/05/toplevelxmltraversing-xml-structures.html Dan Freiman nondocs. On 5/25/07, Troy Gilbert <[EMAIL PROTECTED]> wrote: > > #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:flexcoders@ yahoogroups.com] > > *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 > > > > > > > > >

