18

如果某些 javascript 计算的结果是一个包含 10,000 个元素的数组,Node.js repl 会打印出来。我如何防止它这样做?

谢谢

4

6 回答 6

27

你为什么不只是附加; null;到你的表达?

如在

new Array(10000); null;

哪个打印

null

甚至更短,使用;0;

于 2012-12-09T13:16:13.203 回答
9

将结果分配给用 声明的变量varvar语句总是返回undefined

> new Array(10)
[ , , , , , , , , ,  ]

> var a = new Array(10)
undefined
于 2012-12-09T15:08:50.927 回答
9

Node 使用检查来格式化返回值。将 inspect 替换为仅返回空字符串且不会显示任何内容的函数。

require('util').inspect = function () { return '' };

于 2015-06-22T04:34:12.060 回答
5

Javascript 有void专门针对这种特殊情况的运算符。您可以将它与任何表达式一起使用以丢弃结果。

> void (bigArray = [].concat(...lotsOfSmallArrays))
undefined
于 2018-05-01T21:43:31.367 回答
4

你可以自己启动 REPL 并改变任何让你烦恼的东西。例如,undefined当表达式没有结果时,您可以告诉它不要打印。或者您可以包装表达式的评估并阻止它们返回结果。如果你同时做这两件事,你就可以有效地将 REPL 减少为 REL:

node -e '
    const vm = require("vm");
    require("repl").start({
        ignoreUndefined: true,
        eval: function(cmd, ctx, fn, cb) {
            let err = null;
            try {
                vm.runInContext(cmd, ctx, fn);
            } catch (e) {
                err = e;
            }
            cb(err);
        }
    });
'
于 2013-09-07T06:36:32.953 回答
0

我已经在对此问题的评论中说过,您可能希望将命令的执行包装在匿名函数中。假设您有一些重复的过程会返回某种结果。像这样:

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

因为匿名函数不返回任何东西。

于 2012-12-03T13:20:18.190 回答