<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="">).
OK, dann musst da aber noch auf 'null' prüfen falls der Parameter ein Objekt sein kann, dann hast du drei Vergleiche statt einem.
function test(x)
{
this.x = null;;
this.y = null;;
}
test.prototype.X = function(x)
{
this.x = (x || x==0)? x : "default";
return this.x;
}
test.prototype.Y = function(y)
{
this.y = typeof y != 'undefined' ? y : "default";
return this.y;
}
var t = new test();
// X
t.X(null);
alert( 'x=' + t.x );
t.X('');
alert( 'x=' + t.x );
t.X(0);
alert( 'x=' + t.x );
// Y
t.Y(null);
alert( 'y=' + t.y );
t.Y('');
alert( 'y=' + t.y );
t.Y(0);
alert( 'y=' + t.y );
Dann ist PHP in diesem Punkt fehlerhaft umgesetzt, was ich aber nicht glaube.
? Ähm, mal simpel gefragt: Du kennst/kannst aber PHP?
Nein.
PHP:
function test(x="default") {
echo x;
}
test();JS:
function test(x) {
x=(x || x==0)?x:"default";
document.write(x);
}
test();
wie gesagt sollte das nicht das gleiche sein. Das einzige 100% richtige ist, zu testen, ob der Parameter wirklich undefiniert ist. Deine variante mag in 99.9% der Fälle funktionieren, ist aber nicht das gleiche.
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).
Nein, du prüfst nicht auf definiert.
undefiniert ist immer nur typeof == 'undefiniert' alles andere mag in vielen Fällen funktionieren, in manchen aber nicht.
Ich versteh auch nicht warum du es für sinnvolller erachtest zwei Vergeleiche zu machen statt einem.
Struppi.