2015-10-16 4 views
0

Почему вывод строки пропускает знак процента?Javascript stringify «%%» теряет знак процента

var a = ["dp",'%%']; 
var t = JSON.stringify (a); 
console.log ('t: ' + t); 

Результат:

t: ["dp","%"] 

Почему это не результат:

t: ["dp","%%"] 

Спасибо!

+2

Я не могу воспроизвести это, я запустил точный код, который вы отправили, и получил последний результат. – Frxstrem

+1

Я запустил его с node.js v0.10.36 – tgoneil

+0

Интересно. Я просто побежал с JSBin и получил последний результат. – tgoneil

ответ

2

Как указано в документации console.log в Node.js, функция принимает аргументы в printf-like way:

Первый аргумент является строкой, которая содержит ноль или более заполнителей.
Каждый замещающий объект заменяется преобразованным значением из соответствующего аргумента. Поддержанными заполнителями являются:

% s - String.
% d - Число (целое число и поплавок).
% j - JSON. Заменяется строкой «[Циркуляр]», если аргумент содержит круглые ссылки.
%% - знак одного процента ('%'). Это не требует аргумента.
Если у заполнителя нет соответствующего аргумента, заменитель не заменяется.

Таким образом, любое вхождение %% в строке печатается с console.logв Node.js (не браузер) будут заменены единым %. Любые %s, %d или %j будут заменены строкой, номером или строкой JSON, соответственно. Вот некоторые примеры:

console.log("This is a string: %s", "Hello, World!"); 
//= This is a string: Hello, World! 

console.log("This is a number: %d", 3.14); 
//= This is a number: 3.14 

console.log("This is a JSON string: %j", { value: true }); 
//= This is a JSON string: {"value":true} 

console.log("This is a single percentage sign: %%"); 
//= This is a single percentage sign: % 

console.log("If we use %%s and %%d here we get '%s' and '%d'.", "a string", 100); 
//= If we use %s and %d here we get 'a string' and '100'. 

Вызывающие console.log в браузере, однако, будет просто напечатать обычную строку ни с одной из вышеуказанных замен.

+0

Спасибо @Frxstrem! – tgoneil

2

Это не имеет никакого отношения к JSON.stringify. Я могу воспроизвести одиночный вывод % с node 0.10.36, просто сделав console.log('%%'). Вероятно, это проблема с util.format, используемым внутри для console.log узлом.

https://nodejs.org/docs/latest-v0.10.x/api/util.html#util_util_format_format

Однако в node 4.0 я получить ожидаемый результат.

+0

Спасибо за подсказку. Просто обновленный до узла 4.2.1, а также теперь получите %%, по желанию. – tgoneil

Смежные вопросы