当我声明该变量并在下一条语句中通过将其他变量和文本连接起来并通过加等于(+ =)运算符分配值时,我将收到存储在对象中的所有数据。但是,其前面是“未定义”。为了消除变量的初始未定义状态,我在连接之前定义了它,但是,这样会破坏我的plus equals运算符,并截断结果。

     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:名称;会员编号:0000;日期:2016-09-09 09:00;时长:00:00:09;
// ****在日志开头插入“ undefined”

记录var responseComplete = new String();

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

记录var responseComplete =“”;

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

非常感谢您对我对语言的误解。

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

最佳答案

最后两种情况很容易解释:您将每个循环中的responseComplete重置为一个空字符串,所以+ =并没有多大意义,因为您总是将其串联为一个空字符串。


  responseComplete + = abc


和说的一样


  responseComplete = responseComplete + abc


并且由于每个循环中的responseComplete =“”,


  responseComplete =“” + abc = abc


第一种情况比较棘手。由于var是在解析时而不是在运行时求值的,因此这与在for循环外声明变量相同,并且由于已声明但未分配任何值,因此首次使它等于undefined


  responseComplete = responseComplete + ABC
  
  responseComplete = undefinedABC


第二个循环,如果responseComplete被保留,则继续该值。


  responseComplete = responseComplete + _nextValue
  
  responseComplete = undefinedABC + _nextValue = undefinedABC_nextValue

关于javascript - 为什么+ =运算中具有连接的变量会根据其定义产生混合结果?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39521558/

10-12 07:03