在 Javascript 中,他们是一种检查对象方法和属性的方法,例如 Python 的 dir() 吗?
dir(object) returns
object.height
object.width
object.compute_days_till_birthday()
etc.....
在 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
,并且不会显示在列表中。在规范的第 5 版之前,没有标准的方法来定义您自己的不可枚举属性,但最近您可以通过/来实现(规范的第 15.2.3.6 和 12.2.3.7 节)。这还没有得到广泛支持。Date
Object.defineProperty
Object.defineProperties
for ( var prop in obj ) {
console.log( prop + ' is ' + obj[prop] );
}
尝试使用 Chrome 的控制台。如果您使用 向它记录任何类型的变量console.log()
,它可以让您探索它的所有方法和属性,包括原型链。这看起来像这样:
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)
.