Komisches Javascript Phänomen
Choosen
- javascript
0 1UnitedPower0 Choosen0 1UnitedPower0 Choosen0 1UnitedPower0 molily
1 molily0 1UnitedPower0 molily
Hallo Liebes Forum ;D.
Soeben ist mir bei Javascript ein komisches Phänomen aufgefallen und zwar folgendes.
Ich hab mir eine Function erstellt die den Array umstellt.
bevor ich den Array umgestellt habe war er so wie zum Ausgangszustand.
doch durch die Funktion die als result einen gemixten Array zurückliefert wurde auch der Array ansich verändert. Warummm???????
Ich bitte um eine Erklärumg ;D.
Hier der Code:
var JavascripteXtra = function(){
this.CodierArray = [0,1,2,3,4,5,6,7,8,9,'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z']
this.mixArray = function(){
var _input = arguments[0];
if(typeof arguments[1] == "undefined"){
arguments[1] = "1";
}
var isstring;
if (this.isString(_input)){
_input = _input.split("");
isstring = true;
}
for (var i = 0; i < _input.length * arguments[1]; i++){
mix1 = Math.round(Math.random() * (_input.length - 1));
mix2 = Math.round(Math.random() * (_input.length - 1));
buffer = _input[mix1];
_input[mix1] = _input[mix2];
_input[mix2] = buffer;
}
if (isstring){
return _input.join("");
}
return _input;
}
var jX = new JavascripteXtra();
alert(jX.CodierArray)
alert(jX.mixArray(K.CodierArray,10))
alert(jX.CodierArray)
doch durch die Funktion die als result einen gemixten Array zurückliefert wurde auch der Array ansich verändert. Warummm???????
In der Form, wie der Code jetzt hier steht, wirft er einen "unexpected end of input"-Fehler und einige andere.
Wie wärs wenn du diese Fehler erstmal behebst?
Jetz müssts gehn ;D sry
var JavascripteXtra = function(){
this.CodierArray = [0,1,2,3,4,5,6,7,8,9,'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z']
this.mixArray = function(){
var _input = arguments[0];
if(typeof arguments[1] == "undefined"){
arguments[1] = "1";
}
var isstring;
if (typeof _input == 'string'){
_input = _input.split("");
isstring = true;
}
for (var i = 0; i < _input.length * arguments[1]; i++){
mix1 = Math.round(Math.random() * (_input.length - 1));
mix2 = Math.round(Math.random() * (_input.length - 1));
buffer = _input[mix1];
_input[mix1] = _input[mix2];
_input[mix2] = buffer;
}
if (isstring){
return _input.join("");
}
return _input;
}
}
var jX = new JavascripteXtra();
alert(jX.CodierArray)
alert(jX.mixArray(jX.CodierArray,10))
alert(jX.CodierArray)
Das "komische Phänomen" kommt dadurch zu Stande, dass in Javascript Parameter als Referenzen gehandelt werden.
Was muss ich tun damit der Array nicht verändert wird ??
Was muss ich tun damit der Array nicht verändert wird ??
Du kannst auf einer Kopie arbeiten und diese zurückgeben.
var copy = myArray.slice(0);
Was muss ich tun damit der Array nicht verändert wird ??
Eine Kopie des Arrays anlegen, z.B. mit
_input = _input.slice();
Mathias
Das "komische Phänomen" kommt dadurch zu Stande, dass in Javascript Parameter als Referenzen gehandelt werden.
Sämtliche Parameter nicht, sondern Objekte (Objects) werden im Gegensatz zu Primitives als Referenzen übergeben – genauer gesagt by value where value is a reference copy.
Mathias
– genauer gesagt by value where value is a reference copy.
Hervorragender Blog, danke!
– genauer gesagt by value where value is a reference copy.
Hervorragender Blog, danke!
Ja, Dmitry Soshnikovs Artikel sind wirklich Gold wert. Vielleicht interessiert dich meine Übersetzung eines seiner Artikel, der verschiedene zusammenfasst:
Die Grundlagen von JavaScript
Mathias
Vielleicht interessiert dich meine Übersetzung eines seiner Artikel, der verschiedene zusammenfasst:
Du bist sowieso Pflichtprogramm und Idol für mich ;) Der deutsche Paul Irish alias Crockford :P
<3
Du bist sowieso Pflichtprogramm und Idol für mich ;) Der deutsche Paul Irish alias [!*] Crockford :P
*) oder auch