Javascript 关联数组到整数?

标签 javascript arrays types

我正在开发大量实习软件,我的任务是向一个系统添加功能,该系统根据现有奖品和卡片数量构建奖励级别表。

我正在进入添加行的函数,发现一对极其奇怪的声明。我将发布该函数本身,以免缺乏上下文抑制答案。 我搜索了“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);

关于Javascript 关联数组到整数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24512861/

相关文章:

javascript - 使用 Javascript 正则表达式对我的对象进行分类

javascript - 提交模式弹出窗口时无法禁用 .btn-default

C - 如何将 ASCII 代码附加到 char 数组

swift 2.0 : infer closure type error

haskell - 使用类型族时证明约束

javascript - 为什么原型(prototype)的构造函数会引用自身?

javascript - JSFiddle 中的 jQuery 触发器和 On

java - 纸牌游戏、数组和枚举

arrays - 不使用 for 循环的数组广播

c++ - 转化和推广是一回事吗?