JSON.stringify()如何在内部工作?

时间:2018-12-15 18:09:36

标签: javascript json ecmascript-6

replacer自变量函数如何从对象值中提取键和值并将其映射到JSON.Stringify(value,replacer,space)方法中的键和值自变量。

我了解到对象的键成为替换功能的键参数,值成为该功能的值参数。

let user={name:"anup", age:22};
JSON.stringify(user,function(key,value){
          if(typeof value==="string"){
               return undefined;
           }
           return value;
 },null);

在这里,名称成为替换函数的键,而“ anup”成为替换函数的值,这很好,但是我的问题是这种映射是如何发生的? 通常,我们通过在该方法调用中传递参数来调用任何方法,例如

 function a(c,d){
  // logic
 }
 a(2,3);

但是在stringify方法中,我们没有将任何此类东西传递给replacer函数或回调函数,而是如何将其映射?

实际上,我是javaScript世界中的新手,所以我无法理解。如果您在这方面指导我,我将非常感谢您。

1 个答案:

答案 0 :(得分:0)

  

JSON.stringify()如何在内部工作?

那可能是一些底层的,高度优化的本机代码。但是,让我们假设它只是一个常规的Ja aScript函数,这使事情变得简单。该函数将这样定义:

 JSON.stringify = function(toStringify, replacer) {

现在,该函数必须确定首先使用toStringify,例如:

  if(typeof toStringify === "object") {

在这种情况下,代码必须遍历所有对象的键/值对:

  for(let key in toStringify) {
    let value = toStringify[key];

现在代码可以用这些对调用替换器了:

   value = replacer(key, value);

然后可以将字符串构建为:

   result += `"${key}": ${JSON.stringify(value)}`;

然后返回结果。