Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/467.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 以任何方式穿越所有非–;可枚举属性?_Javascript - Fatal编程技术网

Javascript 以任何方式穿越所有非–;可枚举属性?

Javascript 以任何方式穿越所有非–;可枚举属性?,javascript,Javascript,在编写JavaScript时,我经常忘记内置对象的一些属性,不得不在中查找它们,这很麻烦,因为这会减慢我的工作速度 创建一个对象并使用for。。。在中,使用console.log()检查它。但是当涉及到不可枚举的属性时,即使是对于。。。在中没有帮助 所以我的问题是,除了谷歌和文档,还有什么方法可以检查不可枚举的属性吗 for(var i in Object){ console.log([i,Object[i]]); // ["wtbind", function()] } cons

在编写JavaScript时,我经常忘记内置对象的一些属性,不得不在中查找它们,这很麻烦,因为这会减慢我的工作速度

创建一个对象并使用
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' ]