TypeError:Math.floor()不是函数

时间:2018-04-07 21:22:58

标签: javascript node.js

我有一个用discord.js编写的Node.js Discord Bot,我想制作一个基于回合的战斗系统,所以我做了一个伤害计算功能。

var damage = parseFloat( Math.floor( Math.random() * skill.dmg/5 ) + skill.dmg )
//some other factors, none causing the error
damage = Math.floor( damage )

代码非常简单,但是

错误
  

TypeError:Math.floor(...)不是函数

我已经检查了所有其他帖子,做了他们所做的,但没有任何效果, 我已经清除了缓存,我已经检查了camelCase,...

我该怎么办?

主要功能代码:

var damage = parseFloat( Math.floor( Math.random() * skill.dmg/5 ) + skill.dmg )
damage += weapons[ user.inv.armor.weapon ].damage
var crit = ( ( Math.floor( Math.random() * 100 ) + skill.crit ) > 100 ? ( Math.random() + 1 ).toFixed( 1 ) : 1 )
damage *= crit
if ( !tags.includes( 'ignorant' ) ) {
    damage -= enemy.stats.res
    damage *= parseFloat( "0." + ( 100 - enemy.res[ tags[1] ] ) )
    damage -= shields[ enemy.inv.armor.shield ].res
}
damage = Math.floor( damage )damage = Math.floor( damage )
( monster ? enemy.hp -= damage : enemy.profile.hp -= damage )

1 个答案:

答案 0 :(得分:10)

Math.floor确实存在,Math不是问题。如果Math.floor不是函数,则错误将是:

TypeError: Math.floor is not a function

但是你得到了

TypeError: Math.floor(...) is not a function

这意味着你在做:

Math.floor(damage)();

请在damage = Math.floor( damage )之后发布最有可能(...)的代码,以便我们确定错误。

try {
  Math.floors(5); // Added extra S on purpose
} catch(e){
  console.log(e.message);
}


try {
  Math.floor(5)();
} catch(e){
  console.log(e.message);
}

<强>更新

错误是在以下代码中触发的:

damage = Math.floor( damage ) 
( monster ? enemy.hp -= damage : enemy.profile.hp -= damage )

您正在做的是调用 Math.floor这是一个数字的结果。

damage = Math.floor( damage ); // ; this bad boy was all that was missing.
monster ? enemy.hp -= damage : enemy.profile.hp -= damage;

这就是分号很重要的原因!

Do you recommend using semicolons after every statement in JavaScript?

是的,我绝对