2

我有类似这样的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; ?>';

有用。有人能指出问题吗?

谢谢

4

3 回答 3

8

通过使用Array构造函数,您正在创建一个已经定义了许多“槽”的数组。在您的情况下,当您创建数组时,它们都有 3 个元素(每个元素的值都是undefined.)

使用 时,会向该数组push添加一个额外的元素。当您在特定索引处设置元素时,您只需设置该元素的值。

我建议不要使用Array构造函数,而是创建数组文字:

var pl = [];
var il = [];
pl.push('<?php echo $var1; ?>');
il.push('<?php echo $var2; ?>');

这一次,创建的数组没有元素,所以当你使用时,push你将一个元素推入索引 0,而不是 4。

于 2012-06-17T19:58:33.760 回答
2

尝试这个:

var pl=[];
var il=[]; 
pl.push('<?php echo $var1; ?>');
il.push('<?php echo $var2; ?>');
于 2012-06-17T19:58:10.593 回答
1

new Array(count)创建一个设置为的新Array对象,但没有设置索引。打印数组时,您会得到times 。现在,lengthcountarray.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,因为它们是正确的 JSON 但不是正确的 JavaScriptjson_encode似乎确实将它们编码为安全的\u2028\u2029

于 2012-06-17T20:56:08.937 回答