Журнал консоли ({значение}) не совпадает с console.log(значение)

#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 }
 

Это объект, а не строка.