防止打印输出的Node.js repl
如果一些JavaScript计算的结果是一个10000个元素的数组,Node.js repl会打印出来。 我如何防止这样做?
谢谢
你为什么不追加; null;
; null;
你的表情?
如在
new Array(10000); null;
打印
null
甚至更短,使用;0;
将结果赋给一个用var
声明的variables。 var
语句总是返回undefined
。
> new Array(10) [ , , , , , , , , , ] > var a = new Array(10) undefined
节点使用inspect来格式化返回值。 用一个只返回一个空string的函数replaceinspect,它不会显示任何东西。
require('util').inspect = function () { return '' };
你可以自己开始REPL,改变任何让你烦恼的事情。 例如,你可以告诉它,当一个expression式没有结果时,不要打印undefined
。 或者你可以包装expression式的评估,并阻止它们返回结果。 如果你同时做了这两件事情,那么你将REPL有效地减less到REL:
node -e "var vm = require('vm'); require('repl').start({ignoreUndefined: true, eval: function(cmd, ctx, fn, cb) {var err = null; try {vm.runInContext(cmd, ctx, fn);} catch (e) {err = e;} cb(err);}})"
我已经在这个问题的评论中说过,你可能想把你的命令的执行包装在一个匿名函数中。 假设你有一些重复的过程返回某种结果。 喜欢这个:
var some_array = [1, 2, 3]; some_array.map(function(){ // It doesn't matter what you return here, even if it's undefined // it will still get into the map and will get printed in the resulting map return arguments; });
这给了我们这个输出:
[ { '0': 1, '1': 0, '2': [ 1, 2, 3 ] }, { '0': 2, '1': 1, '2': [ 1, 2, 3 ] }, { '0': 3, '1': 2, '2': [ 1, 2, 3 ] } ]
但是,如果将map
方法调用包装为自调用匿名函数,则所有输出都将丢失:
(function(){ some_array.map(function() { return arguments; }); })();
这段代码将得到这个输出:
undefined
因为匿名函数不返回任何东西。