编写JavaScript时,我经常会忘记内置对象的一些属性,并且必须在mdn中查找它们,这非常麻烦,因为它会减慢我的工作。
创建对象并使用for ... in
使用console.log()
进行检查更方便,而不是引用文档。但是当谈到不可枚举的属性时,即使for ... in
也无济于事。
所以我的问题是,除了google和文档之外,有没有办法检查不可枚举的属性?
for(var i in Object){
console.log([i,Object[i]]);
// ["wtbind", function()]
}
console.log(Object.hasOwnProperty('create'));
// true
// Here Object.create is a non–enumerable property,
// and I have to look it up in documents if I forget it.
答案 0 :(得分:3)
此
https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/getOwnPropertyNames
似乎很有用,虽然这是一个相当新的补充,显然在Opera中不起作用。虽然它只列出自己的属性,但您总是可以爬上原型链。
答案 1 :(得分:0)
我知道这很旧,但是您可以为ES6使用新功能,我认为ES2018可以使用此功能:
您可以在迭代器的帮助下使用for...of
。如果实现了可迭代的对象(因为对象不可迭代)
比方说,您有一个具有一个可枚举属性且具有不可枚举属性的以下对象
const obj = Object.defineProperties({}, {
enumerableKey: {
enumerable: true,
value: 'hello'
},
nonEnumerableKey: {
enumerable: false,
value: 'world'
}
});
您可以使用Symbol.iterator
使其迭代并定义自己的实现。在下面的示例中,我产生了每个键的值(但是您可以产生想要的任何值)
obj[Symbol.iterator] = function* () {
for(const key of Object.getOwnPropertyNames(this)) {
yield this[key]
}
}
此后,您可以使用for...of
循环遍历它:
// This will log:
// 'hello'
// 'world'
for(const val of obj) {
console.log(val);
}
或使用传播算子(因为传播使用通过Symbol.iterator
进行的迭代)
[...obj] //[ 'hello', 'world' ]
您想了解更多有关它的信息,建议您阅读以下内容: