2017-02-03 27 views
0

嘿,你們的時間很抱歉,但我遇到了一個奇怪的情況。我有一個數據庫,我用名稱存儲座標(php & mysql)。當某人搜索某個php腳本運行並將查詢保存在3個不同的變量中時,它應該是一個數組類型。然後我使用JavaScript將這些php數組轉換爲JavaScript數組。座標是好的,但名稱是字符串類型時,我嘗試split()函數它給出了錯誤,因爲它是一個數組(因爲我知道搜索後)。另一個奇怪的是,當我console.log它的字符串類型名稱,但是當我查看源代碼時,它顯示爲一個數組。奇怪的JavaScript/PHP變量類型

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

在源標籤的輸出(鉻)

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

,然後控制檯

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

在控制檯

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

在PHP聲明的實際輸出腳本

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

和取出

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

視後@Xufox指的是,名字是一個保留關鍵字在窗口範圍內,因此它的typeof將返回String。可能會出現混淆,因爲JavaScript數據類型是動態的 –

+0

@MathiasW'name'不是保留關鍵字。這是一個屬性,具有類似getter-setter的行爲。設置時,它被轉換爲字符串。這並不涉及動態類型。 'window.name'只是一個特殊的用途,需要保持一個字符串。 – Xufox

+0

感謝您的更正@Xufox,我的壞! –

回答

-1

在JavaScript數組是連鍵爲數字對象。

嘗試在控制檯arr = new Array中創建,然後致電typeof(arr)查看您在vanilla中新創建的數組JavaScript環境也是一個對象。

當心!在JavaScript中創建新數組時length屬性會自動添加到它。因此,如果您嘗試使用foreach循環記錄數組中的每個元素,您將得到一個爲數組長度保留的屬性。

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

//output 
    1 
    2 
    3 
    undefined 

試圖split()陣列並不像這一函數的字符串值,並且拆分它與限定分隔前陣列的選項。

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

P.S. JS中的函數也是對象。因此,基本上可以做這樣的事情:

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

myFunc.myProperty = '123'; 

現在你可以調用你的函數像往常一樣myFunc()也得到它的屬性與console.log(myFunc.myProperty)