我使用HTML集合对象作为数组并将元素添加到其中。以下代码,
var claimantEmailValues = document.getElementsByName("claimantEmails");
var defendantEmailValues = document.getElementsByName("defendantEmails");
var k = defendantEmailValues.length;
for(var i=0; i<claimantEmailValues.length;i++){
defendantEmailValues[k++] = claimantEmailValues[i];
}
最后,defendantEmailValues
的长度应为4,因为我有两个HTML输入元素,分别用于claimantEmails
和defendantEmails
。相反,长度为2,没有错误。除了firefox 10之外,它在firefox的所有版本中运行良好。你能解释一下原因吗?
答案 0 :(得分:3)
JavaScript数组是具有 magic length属性的对象,当您将数字属性设置为等于或高于当前长度时,该属性会增加。 HTMLCollection
个对象具有length属性,但它不是 magic ,并且在设置数字属性时不应该增加。当您向它们添加元素时,您实际上只是使用数字作为属性名称向对象添加命名属性。
最好先使用Array.prototype.slice
将集合转换为数组:
var slice = Array.prototype.slice,
claimantEmailValues = slice.call(document.getElementsByName("claimantEmails")),
defendantEmailValues = slice.call(document.getElementsByName("defendantEmails"));
var k = defendantEmailValues.length;
for(var i=0; i<claimantEmailValues.length;i++){
defendantEmailValues[k++] = claimantEmailValues[i];
}
以前的Firefox版本的行为很可能是错误地允许将项目添加到HTMLCollection
个实例,而这个错误只是在Firefox 10中修复过。