Javascript 数组没有响应forEach

Javascript 数组没有响应forEach,javascript,Javascript,下面是我的Chrome开发控制台中的一些测试: > tags returns ["test_tag", "test_tag2"] > tags.forEach returns undefined > ["test_tag", "test_tag2"].forEach returns forEach() { [native code] } 我不知道为什么我的标记对象没有响应forEach 检查类型不是很有指导意义,这是意料之中的: > typeof(tags) //

下面是我的Chrome开发控制台中的一些测试:

> tags
returns ["test_tag", "test_tag2"]

> tags.forEach
returns undefined

> ["test_tag", "test_tag2"].forEach
returns forEach() { [native code] }
我不知道为什么我的
标记
对象没有响应
forEach

检查类型不是很有指导意义,这是意料之中的:

> typeof(tags)
// returns 'object'
> typeof(["test_tag", "test_tag2"])
// returns 'object'
我如何构造这个
标记
对象

var $nodes = $(".metadata")
var tags = $nodes.map(function(idx, node){
  nodeJson = $(node).text()
  return JSON.parse(nodeJson)['tags']
})
jQuery的
map()
函数返回元素集合,或者在本例中返回包装在jQuery对象中的文本,该对象当然是对象,而不是数组

如果要将文本放入数组中,还可以使用
get()

var $nodes = $(".metadata")
var tags = $nodes.map(function(idx, node){
    var nodeJson = $(node).text();
    return JSON.parse(nodeJson)['tags'];
}).get();
或者更合适的
$.map

var $nodes = $(".metadata")
var tags = $.map( $nodes, function(node){
    var nodeJson = $(node).text();
    return JSON.parse(nodeJson)['tags'];
});
jQuery的
map()
函数返回元素集合,或者在本例中返回包装在jQuery对象中的文本,该对象当然是对象,而不是数组

如果要将文本放入数组中,还可以使用
get()

var $nodes = $(".metadata")
var tags = $nodes.map(function(idx, node){
    var nodeJson = $(node).text();
    return JSON.parse(nodeJson)['tags'];
}).get();
或者更合适的
$.map

var $nodes = $(".metadata")
var tags = $.map( $nodes, function(node){
    var nodeJson = $(node).text();
    return JSON.parse(nodeJson)['tags'];
});
试着这样做:

Array.prototype.forEach.call(tags, function(el){
    console.log(el);
});
试着这样做:

Array.prototype.forEach.call(tags, function(el){
    console.log(el);
});

您能否显示为
标记指定值的实际代码?您的第一行上的
标签是什么,现在还完全不清楚。仅仅因为序列化为字符串时它看起来像一个数组并不意味着它是一个数组:它可以很容易地成为函数的
参数
内容,它类似于数组,但没有数组原型,但可以像数组一样序列化。请尝试
控制台.assert(Object.prototype.toString.call(tags)='[对象数组])
Array.isArray(标记)
。。。jQuery的
.map
(看起来像jQuery)实际上可能会返回一个jQuery对象?所以是的,它显然不是数组,正如
数组.isArray
所确认的那样。仍然不清楚我应该如何迭代它,不管它是什么。不过,我在问题的最后展示了它是如何定义的。更多信息会有帮助吗?要进行迭代,请使用jQuery的
each
方法。能否显示为
标记赋值的实际代码?您的第一行上的
标签是什么,现在还完全不清楚。仅仅因为序列化为字符串时它看起来像一个数组并不意味着它是一个数组:它可以很容易地成为函数的
参数
内容,它类似于数组,但没有数组原型,但可以像数组一样序列化。请尝试
控制台.assert(Object.prototype.toString.call(tags)='[对象数组])
Array.isArray(标记)
。。。jQuery的
.map
(看起来像jQuery)实际上可能会返回一个jQuery对象?所以是的,它显然不是数组,正如
数组.isArray
所确认的那样。仍然不清楚我应该如何迭代它,不管它是什么。不过,我在问题的最后展示了它是如何定义的。更多信息会有帮助吗?要进行迭代,请使用jQuery的
each
方法。使用
map
的不同语法修复了它。这段经历确实让我希望Javascript中有一个
.class
方法
tags.constructor.name
返回一个神秘命名的
r
,我推断它是jquery选择的“类”。不幸的是,没有,但是一种简单(在生产中绝对不可靠)的方法来检查某个对象是否是jquery对象,就是在标记中执行
“prevObject”
,因为所有jQuery对象都有一个
prevObject
属性。使用
map
的不同语法修复了它。这段经历确实让我希望Javascript中有一个
.class
方法
tags.constructor.name
返回一个神秘命名的
r
,我推断它是jquery选择的“类”。不幸的是,没有,但是一种简单(在生产中绝对不可靠)的方法来检查某个对象是否是jquery对象,就是在标记中执行
“prevObject”
,因为所有jQuery对象都有
prevObject
属性。