奇怪的javascript / php变量类型

时间:2017-02-03 22:32:26

标签: javascript php mysqli

嘿,大家好抱歉你的时间,但我遇到了一个奇怪的情况。我有一个数据库,我存储带有名称的坐标(php& mysql)。当有人搜索某个PHP脚本运行的东西并将查询保存在3个不同的变量中时,它应该是一个数组类型。然后我使用JavaScript将这些php数组转换为JavaScript数组。坐标是好的,但是当我尝试使用split()函数时,名称是字符串类型,它会给出错误,因为它是一个数组(我在搜索后理解)。另一个奇怪的是当我在console.log中输入字符串的类型时,但是当我查看源代码时,它显示为数组。

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

源选项卡(chrome)中的输出

 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'];
}

1 个答案:

答案 0 :(得分:-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()数组不是一个选项,因为此函数接受字符串值并将其分解为具有已定义divider ex的数组。

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

P.S。 JS中的函数也是对象。所以基本上你可以做这样的事情:

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

myFunc.myProperty = '123';

现在您可以像往常一样使用myFunc()调用您的函数,并使用console.log(myFunc.myProperty)

获取它的属性