that's really helpful, thanks for taking the time to reply in such detail --- In flexcoders@yahoogroups.com, "Gordon Smith" <[EMAIL PROTECTED]> wrote: > > > I have also long wondered about primitives in AS3. What is an int? > > What primitives are there? What is a Boolean? > > Here are the types where you don't need to (or can't) use the 'new' > operator because AS3 has literal notation for values of that type: > > int: 32-bit signed integer > > var i:int; // i is 0 by default > i = -7; > > uint: 32-bit unsigned integer > > var u:uint; // u is 0 by default > u = 0xFFCC88; > > Number: 64-bit floating-point number > > var n:Number; // n is NaN (not 0) by default > n = 99.9; > > Boolean: true or false > > var b:Boolean; // b is false by default > b = true; > > String: null or a sequence of 0 or more Unicode characters > > var s:String; // s is null (not "") by default > s = "abc"; > > Array: null or a reference to an instance of the Array class > > var a:Array; // a is null (not []) by default > a = [ 1, 2, 3 ]; > > Object: null or a reference to an instance of the Object class > > var o:Object; // o is null (not {}) by default > o = { a: 1, b: 2 }; > > Class: null or a reference to a class > > import flash.display.DisplayObject; > var c:Class; // c is null by default > c = DisplayObject; > > RegExp: null or a reference to a instance of the RegExp class > > var r:RegExp; // r is null by default > r = /\w+/; // same as r = new RegExp(\\w+ <file://\\w> ); > > XML/XMLList: null or a reference to an instance of the XML/XMLList class > > var x:XML; // x is null by default > x = <a>foo</a>; // same as x = new XML("<a>foo</a>;"); > > - Gordon > > ________________________________ > > From: flexcoders@yahoogroups.com [mailto:[EMAIL PROTECTED] On > Behalf Of Peter Farland > Sent: Thursday, April 05, 2007 8:37 AM > To: flexcoders@yahoogroups.com > Subject: RE: [flexcoders] Re: question about string equality > > > > Oops, I deleted part of a sentence, it should have been: > > "or you're trying to do more and, say, cater for a case where you want > the empty string and null to be equivalent as uninitialized states in > your program"? > > ________________________________ > > From: flexcoders@yahoogroups.com <mailto:flexcoders%40yahoogroups.com> > [mailto:flexcoders@yahoogroups.com <mailto:flexcoders%40yahoogroups.com> > ] On > Behalf Of Peter Farland > Sent: Thursday, April 05, 2007 11:23 AM > To: flexcoders@yahoogroups.com <mailto:flexcoders%40yahoogroups.com> > Subject: RE: [flexcoders] Re: question about string equality > > For AS3, I think it is fine to use the new operator in general - I was > clutching-at-straws as to why something might be different in your > scenario (largely because I know in AS2 there was a difference between > "" and new String() as there was the concept of primitives and object > forms of the string type and the object form wouldn't serialize > correctly in AMF 0, for instance). > > To be honest, I've lost track of the original question in this thread > and am not sure whether you're just looking for the best way to compare > strings in AS3 or you're trying to do more and, say, cater for a case > where you want the empty string being to be equivalent to an > uninitialized state in your program? > > I know one scenario that can be confusing is this: > > var s1:String = ""; > var s2:String = null; > > if (s1) > { > trace("s1 was true"); > } > > if (s2) > { > trace("s2 was true"); > } > > Neither of these trace statements will execute. I always avoid this > short-cut syntax because it leads to further confusion that all > non-zero-length strings evaluate to true, and a string like "false" will > just be seen as a String of length > 0 and hence true. To be safe, I > always write the condition I'm trying to test explicitly... > > if (s1 != null && s1 == "true") > { > //... > } > > Pete > > > > > ________________________________ > > From: flexcoders@yahoogroups.com <mailto:flexcoders%40yahoogroups.com> > [mailto:flexcoders@yahoogroups.com <mailto:flexcoders%40yahoogroups.com> > ] On > Behalf Of simonjpalmer > Sent: Thursday, April 05, 2007 11:02 AM > To: flexcoders@yahoogroups.com <mailto:flexcoders%40yahoogroups.com> > Subject: [flexcoders] Re: question about string equality > > huh, thanks again Pete, I am obviously have my Java roots showing. > This is the sort of thing that it is hard to get to know about AS3 > without coding for some time, and I am relatively new to it. > > How do I distinguish between types that need initialisation through > new and those that don't? For instance an ArrayCollection needs a new > whereas a Number (and apparently a String) does not. I naively > considered them all to be objects and as such need initialising, > although I am clearly not religious about it in my code. > > I have also long wondered about primitives in AS3. What is an int? > What primitives are there? What is a Boolean? > > Is there a good reference source for this sort of AS3 information? I > think I have travelled far enough that it is about time I went back to > the beginning. > > --- In flexcoders@yahoogroups.com <mailto:flexcoders%40yahoogroups.com> > <mailto:flexcoders%40yahoogroups.com> > , "Peter Farland" <pfarland@> wrote: > > > > I would guess that === is actually faster than == as the latter has to > > check whether it needs to perform any casting before checking > equality. > > > > Out of curiousity, have you tried to use "" instead of new String() to > > initialize category (it's unconventional to use new String() in AS3)? > > > > Otherwise, you could send the complete source in a bug for the team to > > take a look. > > > > Pete > > > > ________________________________ > > > > From: flexcoders@yahoogroups.com <mailto:flexcoders%40yahoogroups.com> > <mailto:flexcoders%40yahoogroups.com> > [mailto:flexcoders@yahoogroups.com <mailto:flexcoders%40yahoogroups.com> > <mailto:flexcoders%40yahoogroups.com> > ] On > > Behalf Of simonjpalmer > > Sent: Wednesday, April 04, 2007 12:42 PM > > To: flexcoders@yahoogroups.com <mailto:flexcoders%40yahoogroups.com> > <mailto:flexcoders%40yahoogroups.com> > > Subject: [flexcoders] Re: question about string equality > > > > > > > > Good point, I didn't include the declarations. > > > > They are both strongly typed Strings, I don't use objects anywhere in > > my code. > > > > co is a custom AS object of type "Competitor", here's the declaration > > of the name member: > > > > public var name:String; > > > > oc is a custom AS object of type "ObjectCategory" and here is the > > declaration of the category member: > > > > public var category:String = new String(); > > > > The strong typing answers the question about whether they just happen > > to contain strings. > > > > Other than the fact that they belong to custom objects I have written, > > there is nothing peculiar about either the string variables or their > > contents. > > > > I don't think they are in a custom namespace, but to be honest I'm not > > exactly sure what that means, so I can't say with certainty that they > > aren't. I think the answer is no. > > > > co.name gets populated by various means, either though a user gesture > > in a custom page or by retrieval from a java data adaptor to my > > server. oc.category is populated programmatically during execution of > > the code in question. > > > > I appreciate you guys looking at this. Right now I have it working as > > I expect but it is a bit worrying that I need to do the comparison in > > this way only in this instance. That says to me that I don't properly > > understand something. > > > > If I want to check equality of the content of two strings should I > > always be testing valueOf()? > > > > What is the overhead of using ===? > > > > --- In flexcoders@yahoogroups.com > <mailto:flexcoders%40yahoogroups.com> > <mailto:flexcoders%40yahoogroups.com> > <mailto:flexcoders%40yahoogroups.com> > > , "Peter Farland" <pfarland@> wrote: > > > > > > What are the type declarations of the properties sc.name and > > > sc.category? Do they just happen to hold String values or are they > > typed > > > to enforce that they hold String values? Is there anything else > unique > > > about these properties? Are they in a custom namespace? Are they > > > read-only? How were they populated in the first place? > > > > > > ________________________________ > > > > > > From: flexcoders@yahoogroups.com > <mailto:flexcoders%40yahoogroups.com> > <mailto:flexcoders%40yahoogroups.com> > <mailto:flexcoders%40yahoogroups.com> > > [mailto:flexcoders@yahoogroups.com > <mailto:flexcoders%40yahoogroups.com> > <mailto:flexcoders%40yahoogroups.com> > <mailto:flexcoders%40yahoogroups.com> > > ] On > > > Behalf Of simonjpalmer > > > Sent: Monday, April 02, 2007 6:14 PM > > > To: flexcoders@yahoogroups.com <mailto:flexcoders%40yahoogroups.com> > <mailto:flexcoders%40yahoogroups.com> > <mailto:flexcoders%40yahoogroups.com> > > > Subject: [flexcoders] question about string equality > > > > > > > > > > > > take a look at this code snippet... > > > > > > 01 // check one doesn't already exist with this name > > > 02 bFound = false; > > > 03 for (isc = 0; isc < ss.scenarios.length && !bFound; isc++) > > > 04 { > > > 05 sc = Scenario(ss.scenarios.getItemAt(isc)); > > > 06 if (sc.name.valueOf() == oc.category.valueOf()) bFound = true; > > > 07 } > > > 08 if (!bFound) > > > 09 { > > > 10 // Make a new scenario > > > 11 sc = PlanPointFactory.makeScenario(uli, null, true, false); > > > 12 > > > 13 // add it to the snapshot > > > 14 ss.addScenario(sc); > > > 15 > > > 16 // add it to the local array of categories > > > 17 oc.objects.push(sc); > > > 18 } > > > > > > line 06 is the offending line. > > > > > > if I have: > > > > > > 06 if (sc.name == oc.category) bFound = true; > > > > > > the bFound flag never gets set true. I have to have the valueOf() > > > function in order for the equality to fire correctly. > > > > > > This is not what I expected. I thought that regular equality would > > > have sufficed here since sc.name and oc.category are both Strings. > > > > > > Why am I wrong and why do I need valueOf()? > > > > > >