2015-11-12 27 views
1

這是一個Sheets文檔的腳本,其中who []是一個char數組,而[]是一個int數組,它們都是從R1C1投入。出於某種原因,d + what [i]連接了d的前一個值和[i](作爲字符串 - 意外行爲),但是d-what [i]按預期執行整數相減。我已經通過用d-what [i] *( - 1)來代替這個錯誤,從而消除了怪異。谷歌腳本在整數上重載+就好像它們是字符串一樣,我不知道爲什麼

function compareExpenses(who, what) { 
    var d = 0; 
// var who = ['T','D','T']; 
// var what = [15,10,5]; 

    for (var i=0; i < what.length; i++) { 
    if (who[i] == 'T') { 
     d = d+what[i]; 
    } else { 
     d = d-what[i]; 
    } 
    } 

    return d/2; 
} 

在情況下,它是不清楚:與在代碼樣品輸入d的每一次迭代後的值是:「015」,5「 55」。此工作表上不存在其他代碼。我不知道這會導致+以這種方式超載嗎?

+0

使用腳本調試步驟和調查。它必須是你輸入的內容不是代碼註釋中的內容。 –

+0

你可以使用'Number(d)+ what [i]'來演繹嗎? – Matt

回答

0

根據您使用變量d的方式,在每次迭代時重置變量d

for (var i=0; i < what.length; i++) { 
    d = 0; //Reset 

    if (who[i] == 'T') { 

或轉換d爲數字在每個循環的開始:

for (var i=0; i < what.length; i++) { 
    d = Number(d); //Convert to number 

    if (who[i] == 'T') { 

「加」操作符是用來連接文本。 「減號」運算符不用於連接文本。這是不同的。 JavaScript一直在試圖將變量類型「強制」到變量類型應該是「認爲」的地方。如果一個值是文本,一個值是一個數字,並且使用了加號運算符,則JavaScript會將該數字改爲文本並連接文本。

Operator Precedence

JavaScript Addition

相關問題