var x=["la","le","lu"],y=x;alert(y);x[3]="li";alert(y); // "call by reference" - solange nur werte von "x" geaendert werden, dazu zaehlen auch erweiterung oder entfernen, haelt "y" nur eine referenz auf "x"; var x=["la","le","lu"],y=x;alert(y);x=[3];alert(y); // "call by value" - sobald "x" geloescht oder durch neudeklaration oder neudefinition ueberschrieben wird, verliert "y" seine zeigereigenschaft und wird der legitime nachfolger von "x" mit genau den eigenschaften von "x", bevor dieses ueberschrieben wurde; /* var x=new Number("24"),y=x;alert(y);x=-1;alert(y); var x=new String("blubb"),y=x;alert(y);x=-1;alert(y); var x=new Boolean(0),y=x;alert(y);x=-1;alert(y); var x=/\s*/,y=x;alert(y);x=-1;alert(y); var x=new Date(),y=x;alert(y);x=-1;alert(y); var x=new Function("a","b","return a*b;"),y=x;alert(y);x=-1;alert(y); var x=new Error("selfError"),y=x;alert(y);x=-1;alert(y); */ var x=function(a,b){return a*b;}; var y=function(a,b){return a*b;}; var z=x; alert(x==y); // false !!!!! alert(y==z); // false - ok, what else if one considers the first alert; alert(x==z); // true - mmh, not quite clear since "z" 'remembers' the full function if "x" gets deleted what points to a full copy or clone of function "x" but not to a reference of it like the alert tries to make one believe; alert(x.toString()==y.toString()); // true - ok, as expected; alert(x(3,5)==y(3,5)); // true - ok, as expected; x = null; delete x; alert(z); // "function(a,b){return a*b;}" - functions always get copied, never referenced; // annotations: - in mozilla "toString" and "toSource" return slightly different string values in terms of how word-wrapping gets handled; // - msie and opera don't support method "toSource" at all; x = {a:2,b:{ba:2,bb:3,bc:4},c:4,d:5}; y = {a:2,b:{ba:2,bb:3,bc:4},c:4,d:5}; alert(x); // "[object Object]" - alert(x) always courses a "toString" casting on the processed object; alert(x.toSource()); // "({a:2,b:{ba:2,bb:3,bc:4},c:4,d:5})" in mozilla only - msie and opera don't support this method; alert(x == y); // false - ok, as expected; alert(x.toSource() === y.toSource()); // true - ok, as expected -but again- in mozilla only - msie and opera don't support this method; // solutions : - write Object.prototype.toSource() for jsApis that don't support this method; // - write Object.prototype.equals() for comparison of truly identical objects where operator "===" would return [false] even though it should be [true]; Array.prototype.normalize = function() { // Array.prototype.unify var arr = this, i = 0, k = 0; while (i