我有javascript代码这样的东西 -
var count=3;
var pl=new Array(count);
var il=new Array(count);
pl.push('<?php echo $var1; ?>');
il.push('<?php echo $var2; ?>');
为什么这不起作用?
但是,如果我尝试这样的事情
pl[0]='<?php echo $var1; ?>';
有效。有人可以指出问题吗?
谢谢
答案 0 :(得分:8)
通过使用Array
构造函数,您将创建一个已定义了许多“槽”的数组。在您的情况下,数组在创建时都有3个元素(每个元素的值为undefined
。)
使用push
时,会向该阵列添加 extra 元素。在特定索引处设置元素时,只需设置该元素的值。
我建议不要使用Array
构造函数,而是创建数组文字:
var pl = [];
var il = [];
pl.push('<?php echo $var1; ?>');
il.push('<?php echo $var2; ?>');
这次创建的数组没有元素,因此当你使用push
时,你将一个元素推入索引0而不是4。
答案 1 :(得分:2)
试试这个:
var pl=[];
var il=[];
pl.push('<?php echo $var1; ?>');
il.push('<?php echo $var2; ?>');
答案 2 :(得分:1)
new Array(count)
创建一个新的Array
对象,length
设置为count
,但没有设置索引。打印数组时,array.length
次undefined
。现在,
array.push(value);
与
相同array[array.length] = value;
array.length ++;
在new Array(3)
之后设置元素编号3(第4个元素);
pl[0] = '<?php echo $var1; ?>';
pl[1] = '<?php echo $var2; ?>';
pl[2] = '<?php echo $var3; ?>';
确实“正确”工作;那是根据期望;但你仍然不需要初始化数组的长度;甚至做着
var pl = [];
pl[0] = 1;
pl[1] = 2;
pl[2] = 3;
仍会导致pl.length
为3。
但是,您的PHP代码存在严重缺陷,可能会破坏您的网站和使用它的用户的安全性。如果$var1
包含'
字符(因为它来自用户或您意外插入),您将自己开枪 - 如果$var1
设置为:
$var1 = "'; $.ajax('/user/delete', { method: 'post' }); '"
请帮自己一个忙,并使用json_encode
函数来正确引用这些值:
var pl = [],
il = [];
pl.push(<?php echo json_encode($var1); ?>);
il.push(<?php echo json_encode($var2); ?>);
或甚至更好地注意到您可以使用json_encode
轻松创建数组,如
var pl = <?php echo json_encode(array(1, 'a', 'b', 5.7)) ?>;
这将产生JavaScript代码:
var pl = [1,"a","b",5.7];
你必须小心使用unicode字符U + 2028和U + 2029,因为它们是proper JSON but not proper JavaScript。 json_encode
确实将它们编码为\u2028
和\u2029
,这是安全的。