Javascript 以任何方式穿越所有非–;可枚举属性?
在编写JavaScript时,我经常忘记内置对象的一些属性,不得不在中查找它们,这很麻烦,因为这会减慢我的工作速度 创建一个对象并使用Javascript 以任何方式穿越所有非–;可枚举属性?,javascript,Javascript,在编写JavaScript时,我经常忘记内置对象的一些属性,不得不在中查找它们,这很麻烦,因为这会减慢我的工作速度 创建一个对象并使用for。。。在中,使用console.log()检查它。但是当涉及到不可枚举的属性时,即使是对于。。。在中没有帮助 所以我的问题是,除了谷歌和文档,还有什么方法可以检查不可枚举的属性吗 for(var i in Object){ console.log([i,Object[i]]); // ["wtbind", function()] } cons
for。。。在
中,使用console.log()
检查它。但是当涉及到不可枚举的属性时,即使是对于。。。在中没有帮助
所以我的问题是,除了谷歌和文档,还有什么方法可以检查不可枚举的属性吗
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.
这个
看起来很有用,虽然这是一个相当新的增加,显然不工作的歌剧。虽然它只列出了自己的属性,但您始终可以沿着原型链爬上去。我知道这是旧的,但您可以为ES6使用新功能,我认为ES2018可以: 如果实现了一个iterable对象(因为对象是不可iterable的),则可以在迭代器的帮助下使用for…of 假设以下对象具有一个可枚举属性和一个不可枚举属性
const obj = Object.defineProperties({}, {
enumerableKey: {
enumerable: true,
value: 'hello'
},
nonEnumerableKey: {
enumerable: false,
value: 'world'
}
});
您可以使用Symbol.iterator
使其可移植,并定义自己的实现。在下面的示例中,我将生成每个键的值(但您可以生成您想要的任何值)
在此之后,您可以使用for…of
循环遍历它:
// This will log:
// 'hello'
// 'world'
for(const val of obj) {
console.log(val);
}
或者使用spread运算符(因为spreading使用通过Symbol.iterator
的迭代)
如果您想了解更多信息,我建议您阅读以下内容:
console.dir()
而不是console.log()
?不可枚举是否会禁用使用Object.toSource()的功能@lanzz firefox和firebug。我不知道有一个console.dir()
。我尝试了console.dir(Object)//显示“prototype Object{}”
,但那些不可枚举的属性,如Object.create没有显示。@Tar我认为不可枚举的描述符只是对某个属性禁用枚举,不会对禁用.toSource()
对象.getOwnPropertyNames(对象)执行任何操作//[“prototype”、“getPrototypeOf”、“getOwnPropertyDescriptor”、“keys”、“defineProperty”、“defineProperties”、“create”、“getOwnPropertyNames”、“IsExtension”、“preventExtensions”、“freeze”、“IsFreeze”、“seal”、“isSealed”、“length”、“name”、“arguments”、“caller”]
,太棒了!如果我想知道的话,for
循环将显示它们的类型。由于我只在开发环境中使用Object.getOwnPropertyNames
,例如firefox和nodeJS,Opera问题对我来说没问题。再次感谢。@Rufus啊,那么好吧:)另一方面,我主要使用歌剧,所以我不高兴发现这一点;)
// This will log:
// 'hello'
// 'world'
for(const val of obj) {
console.log(val);
}
[...obj] //[ 'hello', 'world' ]