为什么带有连接的+ =运算中的变量会根据它的定义产生混合结果?

时间:2016-09-15 22:59:45

标签: javascript google-apps-script operators string-concatenation

当我声明变量并在下一个语句中通过连接其他变量和文本通过加号等于(+ =)运算符赋值时,我会收到存储在我的对象中的所有数据。但是,它之前是'undefined'。为了消除变量的初始未定义状态,我在连接之前定义了它,但是,这会破坏我的加号等于运算符,截断结果。

     for (var j = 0; j < itemResponses.length; j++) {
        var itemResponse = itemResponses[j]; 
        var responseTitle = itemResponse.getItem().getTitle();
        var responseAnswer = itemResponse.getResponse();
        var responseComplete;                // Inserts undefined at start of log
     // var responseComplete = "";           // Breaks += operation
     // var responseComplete = new String(); // Breaks += operation
        responseComplete += (responseTitle + ": " + responseAnswer + "; ");
      }
      Logger.log(stringData);

记录var responseComplete;

[16-09-15 15:38:02:256 PDT] undefinedName:Name;
会员编号:0000;
日期:2016-09-09 09:00;
时间:00:00:09;
// ****插入&#39; undefined&#39;在日志的头部

记录var responseComplete = new String();

[16-09-15 15:39:02:610 PDT]时长:00:00:09;
// **** Breaks + =运算符。

记录var responseComplete =&#34;&#34 ;;

[16-09-15 15:39:42:010 PDT]时长:00:00:09;
// ****打破+ =运算符。

非常感谢洞察我对该语言的误解。

(此项目是在Google Apps脚本编辑器中编写和执行的)

1 个答案:

答案 0 :(得分:2)

最后两个场景很容易解释:你正在将responseComplete重置为每个循环中的一个空字符串,所以+ =没有多大​​意义,因为你总是连接到一个空字符串。

  

responseComplete + = abc

与说

相同
  

responseComplete = responseComplete + abc

并且因为每个循环中的responseComplete =“”,所以

  

responseComplete =“”+ abc = abc

第一种情况不那么棘手。因为var是在分析时而不是运行时计算的,所以这与在for循环外声明变量相同,并且因为它已声明但未分配给任何值,所以第一次它等于未定义

  

responseComplete = responseComplete + ABC

     

responseComplete = undefinedABC

第二个循环,如果保留responseComplete,则返回值。

  

responseComplete = responseComplete + _nextValue

     

responseComplete = undefinedABC + _nextValue = undefinedABC_nextValue