如果某些 javascript 计算的结果是一个包含 10,000 个元素的数组,Node.js repl 会打印出来。我如何防止它这样做?
谢谢
如果某些 javascript 计算的结果是一个包含 10,000 个元素的数组,Node.js repl 会打印出来。我如何防止它这样做?
谢谢
你为什么不只是附加; null;
到你的表达?
如在
new Array(10000); null;
哪个打印
null
甚至更短,使用;0;
将结果分配给用 声明的变量var
。 var
语句总是返回undefined
。
> new Array(10)
[ , , , , , , , , , ]
> var a = new Array(10)
undefined
Node 使用检查来格式化返回值。将 inspect 替换为仅返回空字符串且不会显示任何内容的函数。
require('util').inspect = function () { return '' };
Javascript 有void
专门针对这种特殊情况的运算符。您可以将它与任何表达式一起使用以丢弃结果。
> void (bigArray = [].concat(...lotsOfSmallArrays))
undefined
你可以自己启动 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);
}
});
'
我已经在对此问题的评论中说过,您可能希望将命令的执行包装在匿名函数中。假设您有一些重复的过程会返回某种结果。像这样:
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
因为匿名函数不返回任何东西。