gpt4 book ai didi

javascript - 为什么 += 串联运算中的变量会根据其定义方式产生混合结果?

转载 作者:行者123 更新时间:2023-12-02 14:11:31 25 4
gpt4 key购买 nike

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

     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:名称;
成员(member)编号:0000;
日期:2016-09-09 09:00;
持续时间:00:00:09;
//**** 在日志头部插入“未定义”

记录 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com