带引号和不带引号的对象

时间:2019-05-07 19:11:23

标签: javascript google-apps-script

编辑:使用Google Apps脚本,这些对象是从其函数传回的对象。当我说“已记录”时,我的意思是返回函数的结果已记录在GAS中。

我有一些对象可以用作较大脚本的配置文件,而我正尝试以编程方式生成较大的配置文件。

调用并登录时:

[ { name: "a1",
        functionName:"functionA",
        options:{something:"a1run"}
      },
      { name: "a2",
        functionName:"functionA",
        options:{something:"a2run"}
      },
      { name: "a3",
        functionName:"functionA",
        options:{something:"a3run"}
      }
    ]

在日志中显示为:

[{
        functionName = functionA,
        name = a1,
        options = {
            something = a1run
        }
    },
    }, {
        functionName = functionA,
        name = a2,
        options = {
            something = a2run
        }
    }, {
        functionName = functionA,
        name = a3,
        options = {
            something = a3run
        }
    }]

您会注意到所有引号都消失了。

但是,当我调用几乎相同的函数时,我使用for循环(此)生成了对象的每个部分

  var s1 = "";
  for (var i=0; i<5;i++)
    {
      var newString = '';
      newString += '{ name: "a'+i+'",';
      newString +=   'functionName: "functionA",';
      newString +=   'options:{something: "a'+i+'run"} },';
      s1+= newString;

    }//for loop

该函数的记录结果是:

[{
        name: "a0",
        functionName: "functionA",
        options: {
            something: "a0run"
        }
    }, {
        name: "a1",
        functionName: "functionA",
        options: {
            something: "a1run"
        }
    }, {
        name: "a2",
        functionName: "functionA",
        options: {
            something: "a2run"
        }
    }, {
        name: "a3",
        functionName: "functionA",
        options: {
            something: "a3run"
        }
    }, {
        name: "a4",
        functionName: "functionA",
        options: {
            something: "a4run"
        }
    }, ]

这是一个问题,因为初始格式可以用作配置文件,而第二种格式则不能。我需要了解JavaScript对象的哪些方面?我认为这不会有所作为,因为使用该对象时会通过JSON.stringify,但是我错了。

我的问题不仅仅是我如何对其进行更改以便以相同的方式进行处理,而是为什么一个人与另一个人的待遇不同。

2 个答案:

答案 0 :(得分:2)

这不是创建JSON数组的正确方法

您应该执行类似的操作,而忘记创建一个JSON数组字符串

let output = [];
for (var i = 0; i < 5; i++) {
  output.push({
    name: "a" + i,
    functionName: "functionA",
    options: {
      something: "a" + i + "run"
    }
  });

}

console.log(output);

答案 1 :(得分:1)

如果您能够使用Stackdriver或使用HTML Service将JSON对象打印到Web浏览器,则可以使用Logger或Google Apps Script内置ID调试器“打印” JSON进行调试,而不是使用它控制台。

上面已经说过,就像您已经发现的“日志”视图(“视图”>“日志”)一样,并非总是正确地打印JSON对象。

如果要使用Logger,首先应将JSON对象转换为字符串。在大多数情况下,使用JSON.stringify(...)可以正常工作。

参考