Hi,
Aber ein Leerstring ist unwahr.
Nö. Ein Leerstring ist nicht unwahr, er wird in einer Bedingung wie unwahr behandelt. Das ist ein *großer* Unterschied.<img src="http://www.vampirehost.de/pzn/texte/img/motz.gif" border="0" alt="">
Das heißt mit deiner Variante kannst du x nicht mehr leermachen. Das Problem wenn du z.b. ein einen Inhalt eines Formularfelds leeren möchtest. zeigt deine Variante den Defaultwert an und keinen Leerstring.
? Ich habe doch *ausdrücklich* geschrieben, daß "meine" Variante korrekterweise den Leerstring nimmt, wenn er übergeben wurde. Überprüf doch im Zweifel den Code, bevor Du eine Routine bezweifelst, von der der Autor auch noch sagt, er hätte sie sicherheitshalber sogar nochmal überprüft (extra für Dich - mit Küßchen und Puderzucker obendrauf).<img src="http://www.vampirehost.de/pzn/texte/img/whowkiss.gif" border="0" alt="">
<img src="http://www.vampirehost.de/pzn/texte/img/gruebel.gif" border="0" alt=""> Denn natürlich kennst auch Du die JavaScript-Typ-Konvertierung, die nur bei "===" nicht greift (na ja, "===" gibt es ja auch auch nicht in JS 1.0 ;)). Und also ist "" wahr, denn x==0 ist zu erfüllen. Dank Konvertierung wird aber "" zu 0 (ebenso übrigens wie false, falls Du das noch irgendwann aus dem Ärmel ziehen solltest<img src="http://www.vampirehost.de/pzn/texte/img/sleep.gif" border="0" alt="">).
Dann ist PHP in diesem Punkt fehlerhaft umgesetzt, was ich aber nicht glaube.
? Ähm, mal simpel gefragt: Du kennst/kannst aber PHP?
PHP:
function test(x="default") {
echo x;
}
test();
JS:
function test(x) {
x=(x || x==0)?x:"default";
document.write(x);
}
test();
Beidesmal ist das Ergebnis gleich, egal ob und was Du test() mit auf den Weg gibst. Ich sehe da auch keinerlei "Unlogik" oder falsches Verhalten. Sollte mir jetzt jemand nahebringen können, was sich nun wobei "fehlerhaft" verhält, will ich es gerne überdenken. :-)
das Fragezeichen prüft ob eine ausdruck wahr ist und ein Ausdruck ist wahr, wenn er ungleich 0, null, kein Leerstring oder true ist, das sind aber alles definierte Werte, dass heißt es ist ein großer Unterschied ob du nur auf unwahr oder wahr prüfst, so wie du es machst oder auf definiert oder nicht definiert.
Keineswegs. Ich prüfe auf undefiniert - nur eben ohne typeof. Ist etwas definiert aber leer, 0 oder false, dann ist es für JS (dank Typ-Konvertierung) auch 0. Ob Du das magst oder nicht glaubst, spielt keine Rolle. Das ist halt so bei JS definiert. Es ist also systemimmanent und nicht zu ändern (mithin verläßlich).
Wenn du einen Wert auf 0, null oder einem Leerstring setzten willst, dann funktioniert sie nicht mehr.
OK, einigen wir uns darauf: Es funktioniert nicht - nur ich habe so abstruse Browser, wo es funktioniert. Du hast Recht, ich meine Browser und meine Ruhe ...<img src="http://www.vampirehost.de/pzn/texte/img/silly.gif" border="0" alt="">
Gruß, Cybaer<img src="http://www.vampirehost.de/pzn/texte/img/sid.gif" border="0" alt="">
Hinweis an Fragesteller: Fremde haben ihre Freizeit geopfert, um Dir zu helfen. Helfe Du auch im Archiv Suchenden: Beende deinen Thread mit einem "Hat geholfen" oder "Hat nicht geholfen"!