webForumDet fria alternativet

isset() i as3

Flashur Flash, Shockwave

6 svar · 705 visningar · startad av oskob

oskobMedlem sedan maj 20021 558 inlägg
#1

Hallå!

Jag håller på att bli tokig. Försöker kolla om en variabel är satt men jag hittar verkligen inte hur jag ska bära mig åt.

Försöker jag med
if(myVar == undefined)
så får jag felmeddelande om att myVar inte finns. Hur i hela friden kanman kolla detta utan att få felmeddelande?

Tack på förhand

doridoriMedlem sedan juni 2006244 inlägg
#2

Om du inte har definierat myVar tidigare så kan du inte använda den på något sätt, inte ens för att kolla om den finns.

Det kan du dock lätt lösa genom att (vilket också är vanlig praxis för allt kodande) skapa variabeln i början av ditt script.

Då kan du t.ex skriva

var myVar = null

Då vet du att innan någonting ändrat på variabeln så är den null,
och kan då undersöka detta genom att testa om myVar == null.

Hoppas det hjälper :)

Lycka till!

BlixtsystemsMedlem sedan maj 2005704 inlägg
#3

Det blir ett type error om du sätter en var till null i AS3 om det inte är en variabel med typen "Null" eller "*".
Du måste deklarera en datatyp och null är en egen datatyp och kan inte användas till en sträng eller ett nummer.

Om du deklarerar som "var myVar:int;" så är den undefined och "myVar==undefined" skall funka.
Men du måste deklarera alla variabler med "var" (eller "const" om det skall vara en konstant) innan du kan använda dem.
Så "isset" finns egentligen inte i AS3 utan du får ett felmeddelande om du försöker komma åt en variabel som inte har blivit deklarerad.

doridoriMedlem sedan juni 2006244 inlägg
#4

Blixtsystems skrev:

Det blir ett type error om du sätter en var till null i AS3 om det inte är en variabel med typen "Null" eller "*".

Jag testade det där nyss och måste tyvärr säga att du har fel.
Det ger inget error att sätta en typbestämd variabel till null, och det borde det inte heller.

BlixtsystemsMedlem sedan maj 2005704 inlägg
#5

doridori skrev:

Jag testade det där nyss och måste tyvärr säga att du har fel.
Det ger inget error att sätta en typbestämd variabel till null, och det borde det inte heller.

Om du inte har "warnings mode" på då du kompilerar så omvandlar kompilatorn värdet, men primitiva datatyper kan inte vara null....med undantag av strängar tydligen såg jag nu.

http://livedocs.adobe.com/flash/9.0/main/wwhelp/wwhimpl/common/html/wwhelp.htm?context=LiveDocs_Parts&file=00000047.html skrev:

The Null data type contains only one value, null. This is the default value for the String data type and all classes that define complex data types, including the Object class. None of the other primitive data types, such as Boolean, Number, int and uint, contain the value null. Flash Player will convert the value null to the appropriate default value if you attempt to assign null to variables of type Boolean, Number, int, or uint.

Hursomhelst, jag skulle inte rekommendera att förlita sig på att kompilatorn omvandlar felaktig kod och kör med strict och warnings mode på.

Edit: Default värde på Number är NaN och inte undefined. Alltså så skall du köra "if (isNan(myVar))".
För int så är det 0, vilket gör det svårt att kolla om värdet är satt eller inte.
"var myInt:int=undefined" eller "myInt:int=NaN" kompileras alltså till "myInt:int=0" och går därför inte att se om den är "isset" eller inte.

doridoriMedlem sedan juni 2006244 inlägg
#6

Ah, okej tack, Blixtsystems. :)

Bästa praxis väl i alla fall att skapa variabeln i början av koden och sedan inte ge den något "odefinierat" värde alls, utan att ge den ett riktigt värde, om det är möjligt.
En integer bör ju exempelvis ha värdet 0 från början.
Du kan ju också använda en booleansk variabel som håller koll på om din variabel anropats någon gång.

BlixtsystemsMedlem sedan maj 2005704 inlägg
#7

Jag brukar inte ge variabler något värde då jag definierar dem om det inte finns en specifik anledning då det är rätt sällan det kommer upp att man måste kunna kolla att de verkligen är satta. De standardvärden som de blir satta till är ju vanligtvis helt ok.

Men säg att du har en int som skall peka på ett index i en array.
Om du skapar variabeln med "var index:int;" så är det alltså samma som att skriva "var index:int=0;".
Oftast är det alldeles antingen ovidkommande eller utmärkt som startvärde (dock om det är en del av logiken att värdet skall vara 0 från början skulle jag skriva ut det för tydlighetens skull), men om du vill kunna kolla om du har satt ett index så är det ett problem. Då får man köra t.ex. "var index:int=-1;".

Om det skulle vara en mycket speciell situation där man har en int som kan vara satt till vilket nummer som helst men man måste kunna kolla om den är satt kan jag inte komma på någon annan lösning är att ha en extra booelan som du föreslår.

133 ms totalt · 3 externa anrop · v20260731065814-full.363dfaf6
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
131 ms — hämta tråd, inlägg och bilagor (db)