簡體   English   中英

Javascript關聯數組到整數?

[英]Javascript Associative Array to Integer?

我正在為實習工作開發大量軟件,我的任務是向系統添加功能,該系統根據現有獎品和紙牌數量構建獎品級別表。

我正在進入添加行的功能,並且發現一對極其奇怪的聲明。 我將發布函數本身,以免缺少上下文抑制答案。 我搜索了“ cast”,“ array”和“ number”的各種組合,但似乎與這種做法無關。

this.addNewTableRow = function(){
    var request = new XMLHttpRequest();
    awardLevel = this.length + 1;
    request.onreadystatechange = function(){
        if (request.readyState == 4 && request.status == 200){
            if(request.responseText != -1){
                var tableBody = document.getElementById('award-body');
                var sqlId = parseInt(JSON.parse(request.responseText));

                var prevSelector = document.getElementById('level-select-'+self.length);
                var prevLevel = 0;
                if(prevSelector != null){
                    prevLevel = parseInt(prevSelector.value);
                }

                var minCardQuantity = prevLevel + 1;
                var maxCardQuantity = minCardQuantity + 100;

                var awardLevel = {
                    id: sqlId,
                    awardId: 0,
                    certificateId: 0,
                    awardLvl: self.length + 1,
                    cardQuantity: minCardQuantity
                };

                self.changeLevelSelect(self.length + 1, minCardQuantity);

                var row = self.getRow(awardLevel, minCardQuantity, maxCardQuantity);

                tableBody.appendChild(row);
                self.awards[length] = awardLevel;
                self.length++;
            }
        }
    }
    request.open('GET', '_insert_award_lvl.php?level=' + awardLevel, true);
    request.send();
    location.reload();  
}

讓我感到困惑的行為是對AwardLevel的處理

在聲明之前已對其進行了修改,即使對提升的理解不夠明確,我也不認為該方法可行。 此外,早期賦值運算符似乎是將變量賦給Int,而稍后它被賦值並用作關聯數組。

整個代碼有很多意想不到的混亂行為,而我對Javascript並不熟悉。

外部awardLevel變量不會“在聲明之前進行修改”:從未聲明過。 另一個聲明僅對其聲明的功能有效(並且遮蓋了外部聲明)。

這意味着 :

  • 您有兩個具有相同名稱和語義的不同變量(一個是整數,一個是對象)
  • 其中一個永遠不會被聲明(它是全局的),並且在內部范圍中被聲明的一個陰影
  • 事實上awardLevel有一個名為awardLvl的屬性並不能使它變得更好
  • 這是一個不好的粗心代碼

一種使所有這些稍微減少混亂的方法是:

// awardLevel = this.length + 1; remove that line
request.onreadystatechange = function(){
    // don't change which is here
}
request.open('GET', '_insert_award_lvl.php?level=' + (this.length + 1), true);

暫無
暫無

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

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