Javascript插入数组

时间:2012-06-17 19:55:26

标签: php javascript

我有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; ?>';

有效。有人可以指出问题吗?

谢谢

3 个答案:

答案 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.lengthundefined。现在,

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 JavaScriptjson_encode确实将它们编码为\u2028\u2029,这是安全的。

相关问题