我有类似这样的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; ?>';
有用。有人能指出问题吗?
谢谢
我有类似这样的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; ?>';
有用。有人能指出问题吗?
谢谢
通过使用Array
构造函数,您正在创建一个已经定义了许多“槽”的数组。在您的情况下,当您创建数组时,它们都有 3 个元素(每个元素的值都是undefined
.)
使用 时,会向该数组push
添加一个额外的元素。当您在特定索引处设置元素时,您只需设置该元素的值。
我建议不要使用Array
构造函数,而是创建数组文字:
var pl = [];
var il = [];
pl.push('<?php echo $var1; ?>');
il.push('<?php echo $var2; ?>');
这一次,创建的数组没有元素,所以当你使用时,push
你将一个元素推入索引 0,而不是 4。
尝试这个:
var pl=[];
var il=[];
pl.push('<?php echo $var1; ?>');
il.push('<?php echo $var2; ?>');
new Array(count)
创建一个设置为的新Array
对象,但没有设置索引。打印数组时,您会得到times 。现在,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,因为它们是正确的 JSON 但不是正确的 JavaScript。json_encode
似乎确实将它们编码为安全的\u2028
。\u2029