0

変数を宣言し、次のステートメントでプラスの等号(+ =)演算子を介して他の変数とテキストを連結して値を割り当てると、オブジェクトに格納されているすべてのデータを受け取ります。ただし、「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); 

Log for 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のスクリプトエディタで書かれて実行される)

答えて

2

最後の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

+0

!時には(時には時代の)論理が私を邪魔します。ありがとう! –

関連する問題