当我从解释器编写Python代码时,我可以键入dir()
以获得当前范围中定义的名称列表。当我使用像firebug,chrome console等交互式控制台从浏览器开发Javascript代码时,如何以编程方式获得相同的信息?
答案 0 :(得分:22)
Object中有“keys”方法,例如:
Object.keys(object)
但这只返回对象自己的属性和方法
要列出对象的所有属性和方法,我知道两种可能性:
1. Firefox和WB的firebug控制台中的console.dir(object)方法
2.谷歌Chrome开发工具中的dir(对象)方法。
答案 1 :(得分:13)
如果您需要一个简单的解决方案,这可能对您有用:
function dir(object) {
stuff = [];
for (s in object) {
stuff.push(s);
}
stuff.sort();
return stuff;
}
答案 2 :(得分:8)
在ChatZilla的代码中有一些功能可以做到这一点,你必须正确检查许可证,看看你是否可以把它们撕掉并在任何地方使用它们。
相关功能可在以下网址找到:
http://hg.mozilla.org/chatzilla/file/59b46c0bf716/js/lib/utils.js#l136
dumpObject
和dumpObjectTree
答案 3 :(得分:4)
Google Chrome开发者工具控制台有一个预定义的目录:https://developers.google.com/chrome-developer-tools/docs/console
Firebug有console.dir:http://getfirebug.com/logging
答案 4 :(得分:2)
全局变量保存在易于访问的对象(window
)中,因此您可以轻松地检查/迭代它们。 (使用类似Glenjamin建议的功能)
另一方面,我不知道有任何方法来检查函数或闭包中定义的局部变量 - 如果可能的话,我至少会猜测它会高度特定于浏览器/控制台。
答案 5 :(得分:1)
你可以看到对象只包含它自己的属性:By 它可以在任何控制台中工作,不仅谷歌Chrome浏览器浏览img enter image description here console.dir(OBJ); 这里链接:https://developers.google.com/web/tools/chrome-devtools/console/console-reference
答案 6 :(得分:1)
您可以使用几个函数来获取所需的数据。
Object.keys()
此函数将返回所有可枚举、拥有的非符号属性。
> let person = {name: 'John Doe', age: 25, [Symbol('Test')] : 'value'}
> Object.keys(person);
['name'] // Note that the Symbol('Test') is not in the returned array!
Object.getOwnPropertyNames()
这个函数将返回所有可枚举和不可枚举的属性,它们都是非符号。
> Object.getOwnPropertyNames(Set)
[ 'length', 'name', 'prototype' ]
为什么当我们有 Object.keys()
时这个函数有用?
> Object.keys(Set)
[] // Because keys doesn't give you non-enumerable properies
顺便说一句,为什么 Object.getOwnPropertyNames(Set)
不为您提供 Set
上的方法,例如 add
、has
等?因为他们在Set.prototype
。 Object.getOwnPropertyNames(Set.prototype)
会产生更好的结果。
Object.getOwnPropertySymbols()
这将返回所有拥有的属性,这些属性是您传递给它的对象中的 Symbol
。
> let person = {x: 10, Symbol('Test'): 'Test-value' };
> Object.getOwnPropertySymbols(person);
[Symbol(Test)]
Reflect.ownKeys()
这将返回所有拥有的属性,这些属性是您传递给它的对象中的字符串/符号。
> let person = {x: 1, [Symbol('Test')]: 'Test-value'};
> Reflect.ownKeys(person);
[ 'x', Symbol(Test) ]
Object.getPrototypeOf()
这将返回传递给它的对象的 Prototype
。
> let nameable = { name: 'name' };
> let ageable = Object.create(nameable);
> ageable.age = 0;
> let person = Object.create(ageable);
> let proto_of_person = Object.getPrototypeOf(person);
> proto_of_person === ageable;
true
> let proto_of_ageable = Object.getPrototypeOf(proto_of_person);
> proto_of_ageable === nameable
true
使用它,我们可以递归地枚举对象及其原型链的所有属性。
答案 7 :(得分:0)
(只是为了看看那个列表)
您可以使用运算符“.”,例如:
> var a = "asdfg";
> a. // -> show the list
答案 8 :(得分:0)
首先,创建一个函数,列出一个对象的所有属性:
function dir(object) {
props = [];
for (prop in object) {
props.push(prop);
}
props.sort();
return props;
}
然后,就这么简单,调用 console.log(dir(console))
之类的函数