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()?
> > >
> >
>


Reply via email to