文字列の連結は加算と同じではありません。文字列ではなく、数字を扱っていることを確認する必要があります。
とはいえ、関数には他にも多くの潜在的な落とし穴がありますcalculatechance
。
必要なときに変数を宣言し、後で変数を再宣言すると、変数の巻き上げが原因で問題が発生します。
あなたは「TruthyandFalsy」の値を使用していますが、それ自体は必ずしも悪いことではなく、実際には(JavaScriptの美しい部分の1つである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);
};