为什么我的变量值在 Logger.log 中发生变化

why does my variable value change in Logger.log

我不确定为什么我的 Google 电子表格应用程序中的这段代码会以这种方式运行。我在记录器中的预期输出应该是 "Zip value is 05044" 但我完全得到另一个数字。

function getShippingType(){
  var zip = 05044;
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet,
  digitOne,
  sheetName,
  zipToOutput = [];

  Logger.log("Zip Value is " + zip);

  Logger.log(zipToOutput);
  return zipToOutput;
}

05044 中的前导零使其成为八进制数,因此删除前导零使其成为 5044。

zip 似乎被解释为字符串而不是 int。如果你尝试

function getShippingType(){
  var zip = "05044";
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet,
  digitOne,
  sheetName,
  zipToOutput = [];

  Logger.log("Zip Value is " + zip.toString());
  Logger.log(zip);

  Logger.log(zipToOutput);
  return zipToOutput;
}

日志文件很好。

JavaScript 不断尝试将 "coerce" 数据类型转换为它 "thinks" 应该的数据类型。您的 Zip 变量被实例化为一个数字。然后你试图连接一个字符串和一个数字。你可能会得到这样的东西:

Zip Value is 2596

您不能使用 zip.toString() 将数字转换为字符串,因为它只是 returns 作为字符串的“2596”,而不是“05044”。

您需要用引号将 zip 实例化:

var zip = "05044";

这与Logger.log()方法无关。这就是 JavaScript 的工作原理。

现在你是 "hard coding" 邮编。但是,如果您从电子表格中检索一个值,并且认为变量类型不是您想要的,您可以使用 typeof.

测试数据类型
Logger.log(typeof zip)