簡體   English   中英

Google腳本正在整數上重載+,就好像它們是字符串一樣,我不知道為什么

[英]Google scripts is overloading + on integers as if they were strings and I don't know why

這是一張Sheets文檔的腳本,其中who []是一個char數組,而what []是一個int數組,兩者均取自R1C1輸入。 出於某些原因,d + what [i]將d的先前值和what [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”。 此工作表上沒有其他代碼。 我不知道在幕后發生的事情會導致+以這種方式超載嗎?

根據您使用變量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會將數字更改為文本並連接文本。

運算符優先級

JavaScript添加

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM