在JavaScript中,他们是检查对象方法和属性(例如python的dir())的一种方式? [复制
-
09-10-2019 - |
题
这个问题在这里已经有一个答案:
在JavaScript中,他们是检查对象方法和属性的一种方法,例如Python的dir()?
dir(object) returns
object.height
object.width
object.compute_days_till_birthday()
etc.....
解决方案
firebug有类似的功能
console.dir(obj)
或者你可以自己做一个
var dir = '';
for (var i in obj) dir += 'obj[' + i + '] = ' + obj[i];
alert(dir);
其他提示
是的。您可以使用 for..in
循环(第12.6.4节 规格),通过对象及其原型的枚举特性(如果有一个)循环,则像:
var name;
for (name in obj) {
// `name` is each of the property names, as a string; get the value
// from obj[name]
alert(name + "=" + obj[name]);
}
如果您想区分是否是对象本身或具有属性的原型,则可以使用 obj.hasOwnProperty
:
var name;
for (name in obj) {
if (obj.hasOwnProperty(name)) {
// `name` is the name of a property this object has for itself
}
else {
// `name` is the name of a property the object inherits
// from its prototype
}
}
如果您使用的是支持一些新的实现 eCMAScript 5 东西,你可以使用 Object.keys
要获取其所有枚举的属性名称的数组,但实际上只是一个数组版本 for..in
给你(和 for..in
我见过或您可能会看到的每一次JavaScript的实现都支持。
当我说“枚举”属性时:规范定义的对象的大多数内置属性(如 length
上 Array
实例,或 getTime
上 Date
实例) 不可能 并且不要出现在列表中。直到规格的第五版,没有标准的方式来定义您的 自己的 不可能的属性,但最新的属性可以通过 Object.defineProperty
/ Object.defineProperties
(规格的第15.2.3.6和12.2.3.7节)。这还没有得到广泛支持。
for ( var prop in obj ) {
console.log( prop + ' is ' + obj[prop] );
}
JavaScript有 for .. in
循环构造可以帮助这一点:
for (var name in some_object) {
// some_object[name] is the value of the property
}
但是,这种方法有一些陷阱:
- 对象属性可以是 任何 类型。如果您需要过滤要检索的列表,则需要使用
typeof
. for .. in
会迭代从目标对象的原型链中撤出的属性。如果要仅处理目标对象本身上定义的属性,则应额外测试some_object.hasOwnProperty(name)
.
尝试使用Chrome的控制台。如果您使用任何类型的变量使用 console.log()
, ,它使您可以探索其所有方法和属性,包括原型链。看起来像这样:
不隶属于 StackOverflow