为什么我不能在querySelectorAll的结果上使用map?

时间:2016-09-02 20:24:33

标签: javascript

我最近需要从HTML文档中提取多个节点的值。我使用querySelectorAll获取节点,querySelectorAll返回符合条件的节点列表。之前我曾经使用过arr.map,所以我尝试这样做(这不起作用):

var elems = document.querySelectorAll('select option:checked');
values = elems.map(function(obj) {return obj.value});

当我阅读MDN中的文档时,我发现我必须使用类似的东西:

var elems = document.querySelectorAll('select option:checked');
var values = Array.prototype.map.call(elems, function(obj) {
  return obj.value;
});

我的问题是,如果我从querySelectorAll得到的是一个数组,为什么我不能使用第一个表达式,就像我对任何其他数组一样?

1 个答案:

答案 0 :(得分:5)

  

我的问题是,如果我从querySelectorAll得到的是一个数组,为什么我不能使用第一个表达式,就像我对任何其他数组一样?

querySelectorAll 会返回一个数组,它会返回NodeList

来自MDN(强调我的):

  

返回与指定的选择器组匹配的文档中的元素列表(使用文档节点的深度优先预先遍历遍历)。 返回的对象为NodeList

NodeList在其原型链中没有Array.prototype,因此它没有数组方法。