Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么变量在+;=带有串联的操作根据其';什么是定义?_Javascript_Google Apps Script_Operators_String Concatenation - Fatal编程技术网

Javascript 为什么变量在+;=带有串联的操作根据其';什么是定义?

Javascript 为什么变量在+;=带有串联的操作根据其';什么是定义?,javascript,google-apps-script,operators,string-concatenation,Javascript,Google Apps Script,Operators,String Concatenation,当我声明变量并在下一个语句中通过加号等于(+=)操作符通过连接其他变量和文本来赋值时,我接收存储在对象中的所有数据。但是,它前面有“undefined”。为了消除变量的初始未定义状态,我在连接之前定义了它,但是,这会打断我的加号等于运算符,截断结果 for (var j = 0; j < itemResponses.length; j++) { var itemResponse = itemResponses[j]; var responseTi

当我声明变量并在下一个语句中通过加号等于(+=)操作符通过连接其他变量和文本来赋值时,我接收存储在对象中的所有数据。但是,它前面有“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);
for(var j=0;j
var响应日志完成

未定义名称:名称<会员编号:0000<日期:2016-09-09:00<持续时间:00:00:09
//****在日志头插入“未定义”

var responseComplete的日志=新字符串()

[16-09-15 15:39:02:610 PDT]持续时间:00:00:09
//****中断+=运算符

var响应完成日志=”

[16-09-15 15:39:42:010 PDT]持续时间:00:00:09
//****中断+=运算符

非常感谢您能洞察我对这门语言的误解


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

最后两个场景很容易解释:您在每个循环中将responseComplete重置为空字符串,因此+=没有太大意义,因为您总是连接到空字符串

响应完成+=abc

就是说

responseComplete=responseComplete+abc

既然每个循环中都有responseComplete=“”,那么

responseComplete=“”+abc=abc

第一种情况稍微复杂一些。由于var是在解析时而不是运行时求值的,这与在for循环外部声明变量是一样的,而且由于它已声明但未分配给任何值,所以第一次它等于未定义

responseComplete=responseComplete+ABC

responseComplete=unfinedabc

如果保留responseComplete,则返回第二个循环并向前返回值

responseComplete=responseComplete+\u下一个值

responseComplete=undefinedABC+\u nextValue=undefinedABC\u nextValue


最后两种情况很容易解释:在每个循环中将responseComplete重置为空字符串,因此+=没有多大意义,因为您总是连接到空字符串

响应完成+=abc

就是说

responseComplete=responseComplete+abc

既然每个循环中都有responseComplete=“”,那么

responseComplete=“”+abc=abc

第一种情况稍微复杂一些。由于var是在解析时而不是运行时求值的,这与在for循环外部声明变量是一样的,而且由于它已声明但未分配给任何值,所以第一次它等于未定义

responseComplete=responseComplete+ABC

responseComplete=unfinedabc

如果保留responseComplete,则返回第二个循环并向前返回值

responseComplete=responseComplete+\u下一个值

responseComplete=undefinedABC+\u nextValue=undefinedABC\u nextValue

当然有时(常常)逻辑使我难以理解。谢谢当然有时(常常)逻辑使我难以理解。谢谢