Javascript stringify' %%'丢失百分号

时间:2015-10-16 21:38:40

标签: javascript json stringify

为什么stringify的输出缺少百分号?

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

结果是:

t: ["dp","%"]

为什么不是结果:

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

谢谢!

2 个答案:

答案 0 :(得分:2)

如Node.js中console.log的文档中所述,该函数接受printf-like way中的参数:

  

第一个参数是一个包含零个或多个占位符的字符串   每个占位符都替换为其相应参数的转换值。支持的占位符是:

     

%s - 字符串。
  %d - 数字(整数和浮点数)   %j - JSON。替换为字符串' [Circular]'如果参数包含循环引用。
  %% - 单个百分号('%')。这不会消耗论据   如果占位符没有相应的参数,则不会替换占位符。

因此,在Node.js (非浏览器)中使用%% 打印的字符串中出现console.log的任何内容都将被单个%替换。任何%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将只打印没有上述替换的纯字符串。

答案 1 :(得分: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中,我得到了预期的结果。