php, javascript und boolean
im berufspraktikum habe ich das framework der firma um 2 template engine plugins erweitert, die ich übermorgen im dev-meeting präsentieren werde. die verwendeten scriptsprachen sind php und javascript (genauer: die ajax-libraries prototype und scriptaculous) und die template engine dazu ist smarty. die umsetzung ist natürlich nicht ganz reibungslos abgelaufen - wo wäre da denn der lerneffekt? ;)
zuerst dachte ich mir, mein laptop ist einfach nur stur, doch ich weiß ja, dass das problem meist davor sitzt ;)
als php-programmierer bin ich gewohnt boolsche variablen statt durch
naja, wenn ich ehrlich bin, tendiere ich eigentlich mehr zu
in javascript ist das nicht anders - außer eben, dass die $-zeichen bei den variablen fehlen. soviel zur syntax. bei den rückgabewerten gibt es jedoch einen unterschied.
php-code
javascript-code
ein boolscher wert kann in javascript auch mittels new Boolean() gesetzt werden [beispiele].
hierbei ist aber zu beachten, dass die variable dann kein boolean sondern ein object ist.
javascript-code
wenn jetzt die variable mit new Boolean() gesetzt wurde, liefert die gekürzte schreibweise ein anderes ergebnis als bei der direkten initialisierung mit true oder false. bei boolean wird auf true oder false geprüft - bei object, ob es null bzw leer ist oder nicht.
javascript-code
durch die template engine ist es mir nicht gelungen einen boolschen wert zu übergeben. dadurch versuchte ich die variable mittels new Boolean("false") zu befüllen. deshalb kam auch true heraus, wo ich eigentlich ein false erwartet habe (siehe variable d). sogesehen war es ja richtig, da die variable einen wert hatte und nicht null oder leer war.
es sind eben solche kleinen feinheiten, die den unterschied zwischen den verschiedenen scriptsprachen machen und auch den aufenthalt vor dem computer verlängern ;)
mfg mailo
zuerst dachte ich mir, mein laptop ist einfach nur stur, doch ich weiß ja, dass das problem meist davor sitzt ;)
als php-programmierer bin ich gewohnt boolsche variablen statt durch
if($bool==true) {
// some code
} else {
// another code
}
mit der kürzeren schreibweise// some code
} else {
// another code
}
if($bool) {
// some code
} else {
// another code
}
zu überprüfen.// some code
} else {
// another code
}
naja, wenn ich ehrlich bin, tendiere ich eigentlich mehr zu
($bool?/* some code */:/* another code */);
in javascript ist das nicht anders - außer eben, dass die $-zeichen bei den variablen fehlen. soviel zur syntax. bei den rückgabewerten gibt es jedoch einen unterschied.
php-code
$a = true;
$b = false;
// in php wird true als 1 ausgegeben und false gar nicht
echo $a; // 1
echo $b; //
$b = false;
// in php wird true als 1 ausgegeben und false gar nicht
echo $a; // 1
echo $b; //
javascript-code
var a = true;
var b = false;
// in javascript hingegen wird entsprechend true oder false ausgegeben
document.write(a); // true
document.write(b); // false
var b = false;
// in javascript hingegen wird entsprechend true oder false ausgegeben
document.write(a); // true
document.write(b); // false
ein boolscher wert kann in javascript auch mittels new Boolean() gesetzt werden [beispiele].
hierbei ist aber zu beachten, dass die variable dann kein boolean sondern ein object ist.
javascript-code
var c = new Boolean(true);
var d = new Boolean(false);
document.write(typeof a); // boolean
document.write(typeof b); // boolean
document.write(typeof c); // object
document.write(typeof d); // object
var d = new Boolean(false);
document.write(typeof a); // boolean
document.write(typeof b); // boolean
document.write(typeof c); // object
document.write(typeof d); // object
wenn jetzt die variable mit new Boolean() gesetzt wurde, liefert die gekürzte schreibweise ein anderes ergebnis als bei der direkten initialisierung mit true oder false. bei boolean wird auf true oder false geprüft - bei object, ob es null bzw leer ist oder nicht.
javascript-code
(a?document.write('true'):document.write('!true')); // true
(b?document.write('true'):document.write('!true')); // !true
(c?document.write('true'):document.write('!true')); // true
(d?document.write('true'):document.write('!true')); // true
(a==true?document.write('true'):document.write('!true')); // true
(b==true?document.write('true'):document.write('!true')); // !true
(c==true?document.write('true'):document.write('!true')); // true
(d==true?document.write('true'):document.write('!true')); // !true
(b?document.write('true'):document.write('!true')); // !true
(c?document.write('true'):document.write('!true')); // true
(d?document.write('true'):document.write('!true')); // true
(a==true?document.write('true'):document.write('!true')); // true
(b==true?document.write('true'):document.write('!true')); // !true
(c==true?document.write('true'):document.write('!true')); // true
(d==true?document.write('true'):document.write('!true')); // !true
durch die template engine ist es mir nicht gelungen einen boolschen wert zu übergeben. dadurch versuchte ich die variable mittels new Boolean("false") zu befüllen. deshalb kam auch true heraus, wo ich eigentlich ein false erwartet habe (siehe variable d). sogesehen war es ja richtig, da die variable einen wert hatte und nicht null oder leer war.
es sind eben solche kleinen feinheiten, die den unterschied zwischen den verschiedenen scriptsprachen machen und auch den aufenthalt vor dem computer verlängern ;)
mfg mailo
mailo - 9. Sep, 21:00
Trackback URL:
https://mailo.twoday.net/stories/5180408/modTrackback