Javascript stringify '%%' 丢失了一个百分号

tgo*_*eil 3 javascript json stringify

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

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

结果是:

t: ["dp","%"]
Run Code Online (Sandbox Code Playgroud)

为什么不是结果:

t: ["dp","%%"]
Run Code Online (Sandbox Code Playgroud)

谢谢!

Frx*_*rem 6

正如console.log在 Node.js的文档中所指定的,该函数以类似 printf 的方式接受参数:

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

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

因此,在 Node.js(不是浏览器)中%%打印的字符串中出现的任何. Any , or将分别替换为字符串、数字或 JSON 字符串。这里有些例子:console.log %%s%d%j

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'.
Run Code Online (Sandbox Code Playgroud)

console.log然而,在浏览器中调用只会打印没有上述替换的纯字符串。