【问题标题】:Google scripts is overloading + on integers as if they were strings and I don't know why谷歌脚本在整数上重载 + 就好像它们是字符串一样,我不知道为什么
【发布时间】:2015-11-12 13:01:56
【问题描述】:

这是 Sheets 文档的脚本,其中 who[] 是 char 数组,what[] 是 int 数组,两者均取自 R1C1 输入。出于某种原因, d+what[i] 连接了 d 和 what[i] 的先前值(作为字符串 - 意外行为),但 d-what[i] 按预期执行整数减法。我已经通过替换 d-what[i]*(-1) 确认这是错误,从而消除了怪异。

function compareExpenses(who, what) {
  var d = 0;
//  var who = ['T','D','T'];
//  var what = [15,10,5];

  for (var i=0; i < what.length; i++) {
    if (who[i] == 'T') {
      d = d+what[i];
    } else {
      d = d-what[i];
    }
  }

  return d/2;
}

如果不清楚:对于代码中的示例输入,每次迭代后 d 的值是:'015', 5, '55'。此表上不存在其他代码。我不知道的幕后发生的事情会导致 + 以这种方式超载吗?

【问题讨论】:

  • 使用脚本调试器进行单步调查。一定是您的输入不是您在代码 cmets 中放置的内容。
  • 你可以使用Number(d) + what[i]的演员表吗?

标签: google-apps-script operator-overloading


【解决方案1】:

根据您使用变量 d 的方式,在每次迭代时重置变量 d

for (var i=0; i < what.length; i++) {
  d = 0; //Reset

  if (who[i] == 'T') {

或在每个循环开始时将d 转换为数字:

for (var i=0; i < what.length; i++) {
  d = Number(d); //Convert to number

  if (who[i] == 'T') {

“加号”运算符用于连接文本。 “减号”运算符不用于连接文本。那是不同的。 JavaScript 不断尝试将变量类型“强制”成它“认为”的变量类型应该是什么。如果一个值是文本,一个值是数字,并且使用了加号运算符,JavaScript 会将数字变为文本并将文本连接起来。

Operator Precedence

JavaScript Addition

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-14
    • 2018-07-01
    • 2022-11-25
    • 2021-08-02
    • 2017-08-27
    • 1970-01-01
    相关资源
    最近更新 更多