문자열 연결은 덧셈과 같지 않습니다. 문자열이 아닌 숫자를 처리해야합니다.
그렇다면 calculatechance
함수에는 여러 가지 잠재적 함정이 있습니다.
변수를 필요로 할 때 변수를 선언하고 나중에 변수를 다시 선언하면 나중에 모두 variable hoisting으로 인해 문제가 발생할 수 있습니다.
"Truthy and Falsy"값을 사용하고 있습니다. 그 자체로 나쁜 것은 아니며 실제로는 (JavaScript의 아름다운 부분 중 하나 인 IMHO) 값을 사용하지만 어떻게 작동하는지 이해하지 않으면 문제가 발생할 수 있습니다 .
당신은 익명 코드 블록을 사용하는 것 :
{
if (decimator == 0) {
var decimatormult = 1;
};
if (!decimator == 0) for (var decimatormult = 1; decimator > 0; decimator--) {
decimatormult * 1.07
}
}
나는 다른 브라우저가 해석하는 방법을 모르겠어요. 이를 제거하고 섹션을 설명하기 위해 주석을 사용하는 것이 좋습니다.
원하지 않는 경우 totalattack
의 값을 덮어 쓰고 있습니다.
var calculatechance = function calculatechance() {
'use strict';
var bane = parseFloat(document.getElementById('bane').value, 10) || 0, // Convert to a number (float) and default to 0 if parsing fails.
cbane = parseFloat(document.getElementById('cbane').value, 10) || 0,
obane = parseFloat(document.getElementById('obane').value, 10) || 0,
hbane = parseFloat(document.getElementById('hbane').value, 10) || 0,
mbane = parseFloat(document.getElementById('mbane').value, 10) || 0,
exotic = parseFloat(document.getElementById('exotic').value, 10) || 0,
decimator = parseFloat(document.getElementById('decimator').value, 10) || 0,
mindcontrol = parseFloat(document.getElementById('mindcontrol').value, 10) || 0,
translator = parseFloat(document.getElementById('translator').value, 10) || 0,
anubix = parseFloat(document.getElementById('anubix').value, 10) || 0,
attack = parseFloat(document.getElementById('attack').value, 10) || 0,
// Calculate Invasion Attack
anubixattack = anubix === 100 ? 1 : 0, // Use of ternary operator
// Check Checkboxes
obelisk = document.getElementById("obelisk").checked ? 1 : 0, // Use of ternary operator with truthy/falsy as .checked equals "checked" (truthy) or "" (falsy)
foci = document.getElementById("foci").checked ? 1 : 0,
amp = document.getElementById("amp").checked ? 1 : 0,
overcharge = document.getElementById("overcharge").checked ? 1 : 0,
crux = document.getElementById("crux").checked ? 1 : 0,
mech = document.getElementById("mech").checked ? 1 : 0,
DSC = document.getElementById("DSC").checked ? 1 : 0,
kulgox = document.getElementById("kulgox").checked ? 1 : 0,
terror = document.getElementById("terror").checked ? 1 : 0,
psionic = document.getElementById("psionic").checked ? 1 : 0,
mutagen = document.getElementById("mutagen").checked ? 1 : 0,
stryll = document.getElementById("stryll").checked ? 1 : 0,
cartridge = document.getElementById("cartridge").checked ? 1 : 0,
// Other variables
exoticatt = 0,
decimatormult = 1,
totalattack = attack,
invasionattack = 0;
// Calculate Exotic Bio Disruptor Multiplier
// no logic currently here
// Calculate Exotic Bio Disruptor Static IAttack
switch (exotic) {
case 0:
exoticatt = 0;
break;
case 1:
exoticatt = 250;
break;
case 2:
exoticatt = 350;
break;
default:
exoticatt = (100 * exotic) + 150;
break;
}
//Calculate Atmospheric Decimator Multiplier
if (decimator !== 0) {
while (decimator > 0) {
decimatormult *= 1.07;
decimator -= 1;
}
}
//Calculate Attack
if (obelisk) {
totalattack += attack * 1.1;
}
if (foci) {
totalattack *= 1.05;
}
if (amp) {
totalattack *= 1.15;
}
if (crux) {
totalattack *= 1.1;
}
if (overcharge) {
totalattack *= 1.08;
}
if (anubixattack) {
totalattack += attack * 1.03;
}
//Calculate Invasion Attack
invasionattack = (
totalattack
+ (600 * DSC)
+ (60 * translator)
+ (35 * mindcontrol)
+ (30 * psionic)
+ (40 * mutagen)
+ (2500 * cartridge)
+ (300 * stryll)
+ (15 * mech)
+ (20 * bane)
+ (30 * cbane)
+ (60 * hbane)
+ (45 * obane)
+ (75 * mbane)
+ (decimator * 200)
+ exoticatt
);
alert('Invasion Attack From Modules: ' + invasionattack.toString());
invasionattack = invasionattack * decimatormult;
if (kulgox) {
invasionattack *= 1.1;
}
if (terror) {
invasionattack *= 1.08;
}
alert('Invasion Attack: ' + invasionattack);
};
와우, 쓰레기 :
은 모든 함수가 더 나은로 기록 될 수있다. 정말 고맙습니다! Exotic Bio Disruptor Multiplier에 아무것도없는 이유는 그와 함께 버그가있어서 내가 아직도 놀고 있었기 때문입니다. –
@SeanCaplin : 도와 드리겠습니다. – pete