如果某些javascript计算的结果是10,000个元素的数组,则Node.js repl将其打印出来。我该如何阻止它这样做?
由于
答案 0 :(得分:21)
为什么不将; null;
追加到您的表达中?
在
中new Array(10000); null;
打印
null
甚至更短,请使用;0;
答案 1 :(得分:7)
将结果分配给使用var
声明的变量。 var
语句始终返回undefined
。
> new Array(10)
[ , , , , , , , , , ]
> var a = new Array(10)
undefined
答案 2 :(得分:6)
Node使用inspect来格式化返回值。用只返回空字符串的函数替换inspect,它不会显示任何内容。
require('util').inspect = function () { return '' };
答案 3 :(得分:3)
您可以自己启动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);
}
});
'
答案 4 :(得分: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
因为匿名函数不会返回任何内容。
答案 5 :(得分:0)
Javascript只有void
运算符用于此特殊情况。您可以将它与任何表达式一起使用以丢弃结果。
> void (bigArray = [].concat(...lotsOfSmallArrays))
undefined