enumerableがfalseのプロパティを見る

node.jsでconsole.logとかしてもenumerableがfalseなプロパティは見れない。

var o = Object.create(null, {
  foo: {
    value: 'bar',
    enumerable: false
  },
});
console.log(o.foo); // => bar
console.log(o); // => {}

o.fooはあるのにoをconsole.logしても空に見える。これを見えるようにするにはutil.inspectを使う。

var util = require('util');
...
console.log( util.inspect(o, true) ); // { [foo]: 'bar' }

第二引数でenumerableがfalseのプロパティを見るかどうかを決める。デフォルトがfalseなので明示的にtrueを指定すべし。

ちなみに組み込みのObjectとかArrayのプロパティとかメソッドは基本的に全部enumerableがfalseになってるようなので、これらをみたいときも同じようにする。

console.log( util.inspect(Object, true, null) );
console.log( util.inspect(Array, true, null) );

第三引数は何回再帰するかでデフォルトは2。nullで無限に再帰

内部的にはObject.getOwnPropertyNamesを使ってる。