如何在Chrome中显示JavaScript数组/对象的所有属性?

时间:2014-08-14 22:39:49

标签: javascript arrays object google-chrome-devtools

JavaScript在数组和对象之间有一个surprisingly confusing distinctionarray-like objects

var a = [];  // empty array, right?
a.foo = 'bar';  // a is also an object

问题是,在Chrome DevTools控制台中检查变量时,a只显示一个空数组:

Chrome is confused by objects/arrays

这种数组/对象的使用发生在3rd party code,因此我正在寻找一种方法在Chrome DevTools中显示变量的所有属性

4 个答案:

答案 0 :(得分:2)

在现代浏览器(IE9 +,FF4 +,Chrome5 +,Opera12 +,Safari5 +)中,您可以使用内置的 Object.keys 方法:

Object.keys(a);

DevTools Screenshot

来自MDN

Object.keys()方法返回给定对象自己的可枚举属性的数组,其顺序与for ... in循环提供的顺序相同(不同之处在于for-in循环枚举原型链中的属性。)

答案 1 :(得分:1)

只需使用console.log

即可
a = []
[]
a.foo = 'bar'
"bar"
a
[]
console.log(a)
[foo: "bar"]                                                              VM451:2
undefined

答案 2 :(得分:1)

当你要求在控制台中看到一个数组时(这不在javascript规范中),控制台认为你只想看到数组元素,这就是它向你显示的内容。这并不意味着没有其他属性 - 这就是Google选择实施控制台的方式。


数组是一个对象,具有对象的所有功能。您可以像对象一样分配属性(因为它是一个对象)。

数组还有一个名为.length的特殊属性,可以自动跟踪分配给它的数字属性的长度,从而为其提供数组类型的功能和一系列处理数组顺序性质的方法(.push().pop().slice()等......)。普通对象没有特殊属性.length或任何这些数组方法。数组也可能有一些内部优化,当连续运行数字属性是访问的唯一属性时,它可以提高效率。


因此,您可以使用:

迭代数组元素
for (var i = 0; i < arr.length; i++) {
    // access arr[i] here
}

或.forEach():

arr.forEach(function(value, index, array) {
    // use value and index here
})

或者,您可以使用以下内容迭代所有属性:

var props = Object.keys(arr);
for (var i = 0; i < props.length; i++) {
    // access props[i] here to get the property
    // and arr[props[i]] to get the value of the property
}

或与:

for (var prop in arr) {
    if (arr.hasOwnProperty(prop)) {
        // access arr[prop] here
    }
}

答案 3 :(得分:1)

当chrome执行控制台输出并不包含我感兴趣的所有信息时,我发现我可以通过将其包装在对象中来访问该信息:

({a:a})

chrome tools screenshot

顺便说一下,数组总是一个对象,有或没有额外的属性。

array instanceof object