这个简单的片段(将字符串解析成数组)有什么问题?

时间:2011-06-23 22:52:35

标签: javascript jquery

假设id为'id2'的元素是具有以下条目的textarea:

a@123.com,b@123.com,c@123.com

当我运行时,我得到的值为0,1和2 - 为什么?

jQuery('#myid').submit(function() {
    var temp = jQuery('#id2').serializeArray();
    var email_arr = temp[0].value.split(',');
    for (e in email_arr)
        alert(e);
  return false;
});

3 个答案:

答案 0 :(得分:3)

由于for ... in会迭代键而不是值,因此请改用alert(email_arr[e])

答案 1 :(得分:2)

因为e包含对象的键。要获取该值,请使用email_arr[e]

实际上,使用for...in迭代数组是不明智的,因为它不仅迭代集合中的项目,而且还包括自定义属性和方法的数组的所有成员。因此,只要有人延长Array,您就会在for...in循环中获得意外结果。例如,如果您使用的是IE7,并且想要使用Array.forEach(),则必须将Array扩展为recommended by MDC。扩展Array后,您创建的每个数组都会有一个额外的属性,当您使用for...in进行迭代时,该属性会显示。

相反,请使用Array.forEach()。它解决了在循环遍历数组时可能出现的各种问题。这就是你要做的事情:

email_arr.forEach(function(email, index, list)
{
    alert(email);
});

答案 2 :(得分:0)

不幸的是,在javascript中,for ... in ...循环的工作方式与python中的工作方式不同。 您的e变量实际上是在数组的“索引”(键)上循环。

您应该通过查看email_arr [e]来获得所需的结果。