Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 22-03-2006, 15:18   #1 (permalink)
reneLE
Gast
 
Beiträge: n/a
Strings vergleichen

Kleine Verständigungsfrage:

Warum wird meine Anweisung nicht true?

PHP-Code:
if(pos == ebene){
    
trace("treffer");


Die zu vergleichenden Variablen werden wiefolgt deklariert:
PHP-Code:
var ebene:String = new String(this.xmlSchema.firstChild.childNodes[i].childNodes[k].childNodes[m].childNodes[1].childNodes[0]);
var 
pos:String = new String(); 
Beiden Variablen werden vorab Werte zugewiesen.

gruß
rene
  Mit Zitat antworten
Alt 22-03-2006, 15:20   #2 (permalink)
mod_rewrite
 
Benutzerbild von sonar
 
Registriert seit: Feb 2003
Ort: München
Beiträge: 15.621
Lass es doch mal einzeln ausgeben, also pos und ebene...
sonar ist offline   Mit Zitat antworten
Alt 22-03-2006, 15:23   #3 (permalink)
reneLE
Gast
 
Beiträge: n/a
....identisch!

das funktioniert:

if("wein"=="wein"){

}

das nicht:

var pos:String = new String("wein");
var ebene:String = new String("wein");

if(pos == ebene){

}

Das muss doch gehen!!!!
  Mit Zitat antworten
Alt 22-03-2006, 15:32   #4 (permalink)
Neuer User
 
Registriert seit: Jul 2002
Ort: München
Beiträge: 133
es geht nicht, weil du mit new String() objekte erzeugst, und 2 objekte werden per referenz (und nicht wert) verglichen, sagt das handbuch.
aber so:
ActionScript:
  1. var x:String = new String("hello");
  2. var y:String = new String("hello");
  3. trace (x.toString == y.toString);
geht's.
__________________
when given a choice between two theories, take the one that is funnier. (Blore's razor)
astro-susi ist offline   Mit Zitat antworten
Alt 22-03-2006, 15:38   #5 (permalink)
reneLE
Gast
 
Beiträge: n/a
...nein, leider nicht - mein Rechner gibt bei dem hier auch ein true!

var x:String = new String("hello");
var y:String = new String("hallo");
trace (x.toString == y.toString);
  Mit Zitat antworten
Alt 22-03-2006, 15:42   #6 (permalink)
Pharao a.D.
 
Benutzerbild von Tut-ench-aton
 
Registriert seit: Jul 2004
Ort: 29°58'33.34'' N, 31°07'49.29'' O
Beiträge: 430
Wenn er dabei auch true ausgibt, dann funktioniert doch auch
PHP-Code:
if(pos.toString == ebene.toString){
    
trace("treffer");

Tut-ench-aton ist offline   Mit Zitat antworten
Alt 22-03-2006, 15:44   #7 (permalink)
reneLE
Gast
 
Beiträge: n/a
nein, er gibt immer true aus, "hello" und "hallo" sind unterschiedlich!!

gruß
rene
  Mit Zitat antworten
Alt 22-03-2006, 15:47   #8 (permalink)
voidboy
 
Benutzerbild von rendner[i]
 
Registriert seit: Sep 2004
Ort: München
Beiträge: 5.588
PHP-Code:
var x:String = new String("hello");
var 
y:String = new String("hello");
trace (x.toString() == y.toString()); 
__________________
ERROR: Signature is too large
rendner[i] ist offline   Mit Zitat antworten
Alt 22-03-2006, 15:49   #9 (permalink)
reneLE
Gast
 
Beiträge: n/a
merci, damit gehts.... und wieder was gelernt!
  Mit Zitat antworten
Alt 22-03-2006, 15:54   #10 (permalink)
Neuer User
 
Registriert seit: Jul 2002
Ort: München
Beiträge: 133
ach, blöde klammern...
__________________
when given a choice between two theories, take the one that is funnier. (Blore's razor)
astro-susi ist offline   Mit Zitat antworten
Alt 22-03-2006, 17:11   #11 (permalink)
helpQLODhelp
 
Benutzerbild von bokel
 
Registriert seit: Feb 2002
Ort: Köln
Beiträge: 8.505
Mit den Klammern hat es nichts zu tun. Das eine ist ein String, das andere ist ein XMLNode. Das Problem ist wahrscheinlich, dass man den Unterschied mit trace nicht sehen kann. Mit toString kannst du dir aber auf jeden Fall sicher sein, dass es ein String ist. (es sei denn jemand hat toString falsch überschrieben) Sehr beliebt sind auch Arrays mit einem Element:

ActionScript:
  1. var a = [1,2,3];
  2. trace([2 == a.splice(1,1), 2, a.splice(1,1)]);

Das hat mich schonmal eine Stunde gekostet

mfg. r

Geändert von bokel (22-03-2006 um 17:14 Uhr)
bokel ist offline   Mit Zitat antworten
Alt 22-03-2006, 22:23   #12 (permalink)
muh
 
Benutzerbild von Janoscharlipp
 
Registriert seit: Apr 2002
Ort: Freiburg / Stuttgart
Beiträge: 4.338
Na klar waren die fehlenden Klammern das Problem! Ohne die Klammern wurden die Referenzen auf die toString-Methode verglichen, und da beides Strings waren, hatten sie beide die gleiche toString-Methode (aus ein und dem selben prototype-Objekt).

Und bokel, in deinem Beispiel ist das Problem nicht nur, dass es sich um Array handelt, sondern auch, dass Array.splice das Array verändert:
ActionScript:
  1. var b = [1, 2, 3];
  2. trace([b.splice(1, 1), 2, b.splice(1, 1)]); // 3, 2, 2
  3.  

Das Problem mit dem ein-elementigen Array kommt hier beispielsweise zum Tragen:
ActionScript:
  1. var c = [2, 2, 2];
  2. trace([2 == c.splice(1, 1), 2, c.splice(1, 1)]); // false, 2, 2
  3.  
__________________
»Carpe diem«, sagte der Graf. (Terry Pratchett: Ruhig Blut!)
Janoscharlipp ist offline   Mit Zitat antworten
Alt 22-03-2006, 23:16   #13 (permalink)
helpQLODhelp
 
Benutzerbild von bokel
 
Registriert seit: Feb 2002
Ort: Köln
Beiträge: 8.505
Ja stimmt, da war ich wohl etwas zu oberflächlich.
mfg. r
bokel ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an



Alle Zeitangaben in WEZ +1. Es ist jetzt 08:47 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
Adobe User Group


Copyright ©1999 – 2012 Marc Thiele