В чем разница между "process.stdout.write" и "console.log" в node.js?
РЕДАКТИРОВАТЬ: Использование console.log для переменной показало много нечитаемых символов при использовании process.stdout.write показало объект.
Это почему?
В чем разница между "process.stdout.write" и "console.log" в node.js?
РЕДАКТИРОВАТЬ: Использование console.log для переменной показало много нечитаемых символов при использовании process.stdout.write показало объект.
Это почему?
Ответы:
console.log()звонки process.stdout.writeс форматированным выводом. Смотрите format()в console.js для реализации.
В настоящее время (v0.10.ish):
Console.prototype.log = function() {
this._stdout.write(util.format.apply(this, arguments) + '\n');
};
console.log()кажется, добавить новую
Если посмотреть на документы Node, то console.log - это просто process.stdout.write с переводом строки в конце:
console.log = function (d) {
process.stdout.write(d + '\n');
};
Источник: http://nodejs.org/docs/v0.3.1/api/process.html#process.stdout
Я знаю , что это очень старый вопрос , но я не видел , кто говорил о главном различии между process.stdout.writeи console.logи я просто хочу упомянуть об этом.
Как указали Маувис Лефорд и TK-421 , console.logоператор добавляет line-breakсимвол в конце строки ( \n), но это еще не все, что он делает.
Код не изменился по крайней мере с 0.10.Xверсии, и теперь у нас есть 5.Xверсия.
Вот код:
Console.prototype.log = function() {
this._stdout.write(util.format.apply(this, arguments) + '\n');
};
Как видите, есть часть, которая говорит .apply(this, arguments)и имеет большое значение для функциональности. Это легче объяснить с помощью примеров:
process.stdout.write имеет очень базовую функциональность, вы можете просто написать что-то там, например:
process.stdout.write("Hello World\n");
Если вы не поставите строку разрыва в конце, вы получите странный символ после вашей строки, что-то вроде этого:
process.stdout.write("Hello World"); //Hello World%
(Я думаю, что это означает что-то вроде «конец программы», поэтому вы увидите это только в том случае, если вы process.stdout.writeиспользовали конец файла и не добавили строку разрыва)
С другой стороны, console.logможно сделать больше.
Вы можете использовать его таким же образом
console.log("Hello World"); //You don't need the break line here because it was already formated а также этот странный персонаж действительно исчез
Вы можете написать более одной строки
console.log("Hello", "World");
Вы можете сделать ассоциации
console.log("Hello %s", "World") //Useful when "World" is inside a variable
И это все, что дополнительная функциональность предоставляется благодаря этой util.format.applyчасти (я мог бы много рассказать о том, что именно это делает, но вы поняли мою точку зрения, вы можете прочитать больше здесь ).
Я надеюсь, что кто-то найдет эту информацию полезной.
stdout.writeи как избежать%
%в конце, просто позвонив process.stdout.write('\n');в конце моего цикла (если у вас есть, например)
%просто способ оболочки сказать, что в конце файла нет новой строки.
%в файле
Одно большое отличие, которое не было упомянуто, состоит в том, что process.stdout принимает только строки в качестве аргументов (также могут быть потоками по конвейеру), а console.log принимает любой тип данных Javascript.
например:
// ok
console.log(null)
console.log(undefined)
console.log('hi')
console.log(1)
console.log([1])
console.log({one:1})
console.log(true)
console.log(Symbol('mysymbol'))
// any other data type passed as param will throw a TypeError
process.stdout.write('1')
// can also pipe a readable stream (assuming `file.txt` exists)
const fs = require('fs')
fs.createReadStream('file.txt').pipe(process.stdout)
Еще одно важное отличие в этом контексте было бы с process.stdout.clearLine()и process.stdout.cursorTo(0).
Это было бы полезно, если вы хотите показать процент загрузки или обработки в одной строке. Если вы используете clearLine (), cursorTo () с console.log()ним не работает, потому что он также добавляет \ n к тексту. Просто попробуйте этот пример:
var waitInterval = 500;
var totalTime = 5000;
var currentInterval = 0;
function showPercentage(percentage){
process.stdout.clearLine();
process.stdout.cursorTo(0);
console.log(`Processing ${percentage}%...` ); //replace this line with process.stdout.write(`Processing ${percentage}%...`);
}
var interval = setInterval(function(){
currentInterval += waitInterval;
showPercentage((currentInterval/totalTime) * 100);
}, waitInterval);
setTimeout(function(){
clearInterval(interval);
}, totalTime);
Я только что заметил что-то во время исследования этого после получения помощи с https.request для метода post. Думаю, я поделюсь с вами информацией, чтобы понять
process.stdout.writeне добавляет новую строку, в то время как console.logделает, как уже упоминали другие. Но есть и то, что легче объяснить на примерах.
var req = https.request(options, (res) => {
res.on('data', (d) => {
process.stdout.write(d);
console.log(d)
});
});
process.stdout.write(d);правильно распечатает данные без новой строки. Тем console.log(d)не менее, будет напечатана новая строка, но данные не будут отображаться правильно, <Buffer 12 34 56...например, для этого .
Чтобы console.log(d)правильно показать информацию, мне нужно это сделать.
var req = https.request(options, (res) => {
var dataQueue = "";
res.on("data", function (d) {
dataQueue += d;
});
res.on("end", function () {
console.log(dataQueue);
});
});
Итак, в основном:
process.stdout.write непрерывно печатает информацию как извлекаемые данные и не добавляет новую строку.
console.log печатает информацию о том, что было получено в точке поиска и добавляет новую строку.
Это лучший способ объяснить это.
Простая разница в том, что методы console.log () автоматически добавляют символ новой строки. Это означает, что если мы перебираем и печатаем результат, каждый результат печатается в новой строке.
Методы process.stdout.write () не добавляют символ новой строки. полезно для печати шаблонов.
Console.log реализует process.sdout.write, process.sdout.write - это буфер / поток, который будет напрямую выводиться на вашу консоль.
В соответствии с моей puglin serverline : console = new Console(consoleOptions)вы можете переписать класс консоли с вашей собственной системой readline .
Вы можете увидеть исходный код console.log:
Узнать больше :