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
if($bool==true) {
// some code
} else {
// another code
}
mit der kürzeren schreibweise
if($bool) {
// some code
} else {
// another code
}
zu überprüfen.
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; //
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
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
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
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