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

3
假设id为'id2'的元素是一个文本域,其中包含以下内容:
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;
});

尝试使用 alert(temp),看看会得到什么结果 :) - Patrick Perini
3个回答

3
因为for ... in循环遍历的是键,而不是值,所以应该使用alert(email_arr[e])来代替。

2

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

实际上,不明智地使用for...in遍历数组,因为它不仅遍历集合中的项目,还包括数组的所有成员,包括自定义属性和方法。因此,一旦有人扩展Array,您将在for...in循环中获得意外的结果。例如,如果您正在使用IE7并且想要使用Array.forEach(),则必须像MDC建议的那样扩展Array。使用扩展的Array,现在每个创建的数组都将具有一个额外的属性,当您使用for...in迭代时会显示出来。

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

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

0

很遗憾,在JavaScript中,for ... in ...循环的工作方式与Python不同。

您的e变量实际上正在循环遍历数组的“索引”(键)。

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


我不会说这是不幸的,这是在循环内部获取键和值的简单方法。 - nnnnnn
好的,我会的。:D 这很反直觉,因为它不符合自然语言。 - fulmicoton

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接