Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/228.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
奇数javascript/php变量类型_Javascript_Php_Mysqli - Fatal编程技术网

奇数javascript/php变量类型

奇数javascript/php变量类型,javascript,php,mysqli,Javascript,Php,Mysqli,嘿,伙计们,很抱歉占用你们的时间,但我遇到了一个奇怪的情况。我有一个数据库,我在其中存储坐标(php和mysql)和名称。当有人搜索某物时,php脚本将运行并将查询保存在3个不同的变量中,该变量应为数组类型。然后我使用JavaScript将这些php数组转换为JavaScript数组。坐标是可以的,但是当我尝试split()函数时,名称的类型是string,它给出了错误,因为它是一个数组(正如我搜索后理解的那样)。另一个奇怪的情况是,当我输入console.log时,它显示的名称类型是strin

嘿,伙计们,很抱歉占用你们的时间,但我遇到了一个奇怪的情况。我有一个数据库,我在其中存储坐标(php和mysql)和名称。当有人搜索某物时,php脚本将运行并将查询保存在3个不同的变量中,该变量应为数组类型。然后我使用JavaScript将这些php数组转换为JavaScript数组。坐标是可以的,但是当我尝试split()函数时,名称的类型是string,它给出了错误,因为它是一个数组(正如我搜索后理解的那样)。另一个奇怪的情况是,当我输入console.log时,它显示的名称类型是string,但当我查看源代码时,它显示为一个数组

var lon = <?php echo '["' . implode('", "', $lon) . '"]' ?>;
var lat = <?php echo '["' . implode('", "', $lat) . '"]' ?>;
var name = <?php echo '["' . implode('", "', $name) . '"]' ?>;
然后是控制台

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

在JavaScript数组中,是以键为数字的对象

尝试在控制台中创建
arr=newarray
,然后调用
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()
数组不是一个选项,因为此函数接受字符串值并将其分解为具有已定义分隔符ex的数组

'1,2,3'.split(',')
//result
["1", "2", "3"]
JS中的p.S.函数也是对象。所以基本上你可以做这样的事情:

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

myFunc.myProperty = '123';

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

获取函数的属性,正如post@Xufox所指,name是窗口范围中的保留关键字,因此它的typeof将返回字符串。可能会出现混淆,因为javascript数据类型是dynamic@MathiasW
name
不是保留关键字。它是一个具有类似getter-setter行为的属性。设置后,它将转换为字符串。这实际上与动态类型无关
window.name
只是有一个特殊的用途,需要保留一个字符串。谢谢@Xufox的更正,我的坏消息!使用变量名的Yew不起作用!当我把它改成@Xufox时,它工作得很好。很抱歉占用您的时间,非常感谢!
function myFunc() {
 alert('Hello World');
};

myFunc.myProperty = '123';