#javascript #node.js #console.log
#javascript #node.js #console.log
Вопрос:
Я не застрял или что-то в этом роде, это просто мое собственное любопытство, и я заметил кое-что о Console.log, и я не могу найти ответы в Интернете или их количество ограничено, поскольку я думаю, что поиск в Google с помощью «{}» на самом деле не работает
Я кодирую небольшой узел.Приложение Js, которое взаимодействует с Wi-Fi, и я попробовал следующее :
console.log(ssid " : " pwd);
и он возвращает это
freebox_XXXXX : fake_password
Пока все нормально, но потом я устал и запутался и попробовал это :
console.log({ ssid: ssid, password: pwd });
и он вернул это
{
ssid: 'fx00rx00ex00ex00bx00ox00xx00_x005x007x00ax002x00ax007x00',
password: 'x00Tx00ex00sx00tx00'
}
Мне интересно, почему у вас есть какие-либо ответы?
Подробнее :
Данные, отправляемые через Bluetooth этой функцией в виде bufferArray, создаются с помощью этой функции
str2ab(str) {
let buf = new ArrayBuffer(str.length * 2); // 2 bytes for each char
let bufView = new Uint16Array(buf);
for (let i = 0, strLen = str.length; i < strLen; i ) {
bufView[i] = str.charCodeAt(i);
}
return buf;
}
let payload = str2ab('freebox_XXXXX|' alertData.password);
Затем его получают другие устройства
WriteOnlyCharacteristic.prototype.onWriteRequest = function(data, offset, withoutResponse, callback) {
let payload = data.toString()
let wifiData = payload.split('|');
let ssid = wifiData[0];
let pwd = wifiData[1];
console.log(ssid " : " pwd);
console.log({ ssid: ssid, password: pwd });
});
Комментарии:
1. Когда вы оборачиваете его,
{}
вы создаете буквальный объект и добавляете к нему свойства. Этоssid " : " pwd
просто конкатинация строк2. @Rajesh Это не отвечает, почему Node.js отображает нули в объектах, а не в строках
3. О, хорошо, теперь я понял, но почему он превращает строки в юникод?
4. @DizioAdil Строки JS уже в юникоде
5. @Rajesh
''
(или'x00'
) — нулевой символ, значение ASCII 0
Ответ №1:
Разница заключается в том, как Node.js регистрирует значения.
Поведение console.log()
зависит от типа регистрируемых значений:
- Если строка регистрируется, она записывается в стандартный вывод как есть (ну, не как есть, потому
%
что -args заменяются, но это не по теме для этого вопроса), чтобы разрешить отображение необработанных текстов (необязательно с escape-предложениями) в консоли - Если передается другой тип данных, он будет проверен (предназначен для отладки, так же, как
util.inspect()
и он), то есть он будет преобразован в формат, почти идентичный синтаксису JS, который его создал. Это делает строки внутри сложных структур данных отображаемыми в виде их представления: с кавычками вокруг них и экранированными специальными символами.
Ваши строки содержат нулевые символы между каждой буквой (вероятно, это потому, что ваш код обрабатывает строку UTF-16 как UTF-8 или ASCII где-то), которые не отображаются при входе в консоль, но отображаются escape ( x00
) при проверке строки.
Это причина несоответствия между двумя методами ведения журнала.
Ответ №2:
{ ssid: ssid, password: pwd }
Это объект, а не строка.