【问题标题】:Equivalent of Python's dir() in the node REPL?相当于节点 REPL 中的 Python 的 dir()?
【发布时间】:2016-08-25 03:04:21
【问题描述】:

我正在使用Uint8Array。我不习惯使用Uint8Array

如果这是 Python:

>>> a = [1, 2, 3]
>>> dir(a)
['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__delslice__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getslice__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__setslice__', '__sizeof__', '__str__', '__subclasshook__', 'append', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']
>>> help(a.pop)
< ... shows helpful function documentation ... >

但我使用的是node shell:

$ node
> a = new Uint8Array([1, 2, 3])
Uint8Array { '0': 1, '1': 2, '2': 3 }
> a
Uint8Array { '0': 1, '1': 2, '2': 3 }
> a.pop
undefined
> help(a)
ReferenceError: help is not defined
    ...
> dir(a)
ReferenceError: dir is not defined
    ...    

嗯,StackOverflow 建议Object.keys

> Object.keys(a)  
[ '0', '1', '2' ]
> ???
... ???
... CTRL+D
$ 

猜不出来!

是否有任何等效的方法可以在节点的 shell 环境中检查这样的对象?

【问题讨论】:

  • 不带参数的dir() 怎么样,例如locals()globals()?
  • 好的,在 REPL 中按两次 TAB 会做很多有趣的事情(也在空提示下)。当然,这是在交互式工作时,但dir() 也不是一个真正的程序实用程序。

标签: javascript node.js read-eval-print-loop


【解决方案1】:

. 后面按 TAB:

> a = new Uint8Array([1, 2, 3])
Uint8Array { '0': 1, '1': 2, '2': 3 }
> a. <<TAB>>
a.__defineGetter__      a.__defineSetter__      a.__lookupGetter__      a.__lookupSetter__      a.__proto__             a.constructor
a.hasOwnProperty        a.isPrototypeOf         a.propertyIsEnumerable  a.toLocaleString        a.toString              a.valueOf

a.BYTES_PER_ELEMENT     a.buffer                a.byteLength            a.byteOffset            a.copyWithin            a.entries
a.every                 a.fill                  a.filter                a.find                  a.findIndex             a.forEach
a.indexOf               a.join                  a.keys                  a.lastIndexOf           a.length                a.map
a.reduce                a.reduceRight           a.reverse               a.set                   a.slice                 a.some
a.sort                  a.subarray              a.values

> a.

【讨论】:

  • 还有什么方法可以从 REPL 获取函数文档?
  • 在 Ubuntu 中,我必须在 &gt; a. 之后按两次 TAB
【解决方案2】:

在控制台上编写比 python 更长的时间来获得等效的功能

> a = new Uint8Array([1, 2, 3])
Object.getOwnPropertyNames(a)
[ '0', '1', '2' ]
> //get the properties of Object Type
> Object.getOwnPropertyNames(Object.getPrototypeOf(a))
[ 'constructor', 'BYTES_PER_ELEMENT' ]
> //get the properties of parent
> Object.getOwnPropertyNames(Object.getPrototypeOf(Object.getPrototypeOf(a)))
[ 'constructor', 'buffer', ...]

您可以编写一个递归函数来获取所有内容(如果您不想使用a.[TAB]

function dir(obj, props) {
    if(typeof(props) === "undefined") { props = [];}
    //get parent object
    var pobj = Object.getPrototypeOf(obj);
    if(pobj) { 
        props = props.concat(Object.getOwnPropertyNames(pobj));
        return dir( pobj, props ) 
    }
    else 
    {
       return props.sort()
    }
}

> dir(a)
[ 'BYTES_PER_ELEMENT',
  '__defineGetter__',
  '__defineSetter__',
  '__lookupGetter__',
  '__lookupSetter__',
  '__proto__',
  'buffer', ...]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-12-04
    • 2011-07-29
    • 2022-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-29
    • 2019-08-06
    相关资源
    最近更新 更多