2017-02-03 3 views
0

Hey Jungs Entschuldigung für Ihre Zeit, aber ich habe zu einer seltsamen Situation geraten. Ich habe eine Datenbank, wo ich Koordinaten (php & mysql) mit Namen speichern. Wenn jemand nach etwas sucht, läuft ein PHP-Skript und speichert die Abfrage in 3 verschiedenen Variablen, die von einem Array-Typ sein sollten. Dann benutze ich JavaScript, um diese PHP-Arrays in JavaScript zu konvertieren. Die Koordinaten sind ok, aber die Namen sind vom Typ string, wenn ich versuche, split() -Funktion gibt es Fehler, weil es ein Array ist (wie ich nach der Suche verstehe). Die andere Ungerade ist, wenn ich console.log den Typ des Namens sagt String, aber wenn ich in Quellen suchen wird es wie ein Array angezeigt.ungerade Javascript/PHP Variable Typ

var lon = <?php echo '["' . implode('", "', $lon) . '"]' ?>; 
var lat = <?php echo '["' . implode('", "', $lat) . '"]' ?>; 
var name = <?php echo '["' . implode('", "', $name) . '"]' ?>; 

der Ausgang in Quellen Register (Chrom)

var lon = ["39.070200", "39.072365", "39.064469"]; 
var lat = ["21.018064", "21.017744", "21.000059"]; 
var name = ["Saint Dimitrios", "Saint Charalampos", "Saint Kosmas"]; 

und dann für die Konsole

console.log(lon); 
console.log(typeof lon); 
console.log(typeof name); 

die tatsächliche Ausgabe in Konsole

["21.018064", "21.017744", "21.000059"] //which when I click it identifies it as an array 
object 
string 

die Erklärung in PHP Skript

$lon = []; 
$lat = []; 
$name = []; 

und das Abrufen von

while ($row = mysqli_fetch_array($query)) { 
     $name[] = $row['name']; 
     $lon[] = $row['lon']; 
     $lat[] = $row['lat']; 
} 
+0

Da der Post @Xufox bezieht sich auf, Name ist ein reserviertes Schlüsselwort im Fensterbereich und daher gibt es typeof String zurück. Die Verwirrung kann auftreten, weil JavaScript-Datentypen dynamisch sind –

+0

@MathiasW 'name' ist _not_ ein reserviertes Schlüsselwort. Es ist eine Eigenschaft, die ein Getter-Setter-ähnliches Verhalten hat. Wenn es eingestellt ist, wird es in eine Zeichenkette umgewandelt. Dies bezieht sich nicht wirklich auf dynamische Typisierung. 'window.name' hat nur einen speziellen Zweck und muss eine Zeichenfolge bleiben. – Xufox

+0

Danke für die Korrektur @ Xufox, mein Schlechter! –

Antwort

-1

In JavaScript-Arrays sind Objekte mit Schlüssel als Zahlen.

Versuchen Sie, in der Konsole arr = new Array zu erstellen, und rufen Sie dann typeof(arr) an, um zu sehen, dass Ihr neu erstelltes Array in der JavaScript-Umgebung von JavaScript ebenfalls ein Objekt ist.

Vorsicht! Beim Erstellen eines neuen Arrays in JavaScript length wird die Eigenschaft automatisch hinzugefügt. Wenn Sie also versuchen, jedes Element im Array mit der foreach-Schleife zu protokollieren, erhalten Sie eine weitere Eigenschaft, die für die Länge Ihres Arrays reserviert ist.

arr = [1,2,3] 
arr.forEach(function(key,i,arr) { 
    console.log(key) 
}) 

//output 
    1 
    2 
    3 
    undefined 

ein Array split() Der Versuch ist keine Option, da diese Funktion Stringwert nimmt und bricht es mit definierten Teilers ex auf Array nach unten.

'1,2,3'.split(',') 
//result 
["1", "2", "3"] 

P.S. Funktionen in JS sind auch Objekte. Also im Grunde kann man so etwas wie dies machen:

function myFunc() { 
alert('Hello World'); 
}; 

myFunc.myProperty = '123'; 

Und jetzt Sie Ihre Funktion wie gewohnt mit myFunc() anrufen und erhalten auch Eigenschaft es ist mit console.log(myFunc.myProperty)