JS中的值大相径庭

时间:2018-07-12 08:09:11

标签: javascript node.js

因此,我正在计算值,将其快照并发送到间隔中。但是问题在于,它的数量应该大大增加。

以下是计算:

// Set up mob attributes - SNAPSHOT
const mobId = '1';
var mob = {
  mhp: (mobId + 10) * 15,
  hp: (mobId + 10) * 15,
  dmg: (mobId + 2) * 3,
  defenseRating: (mobId + 3) * 4,
  hitRating: (mobId + 2) * 2,
  critRating: (mobId + 3) * 2,
  critDmg: (mobId + 2) * 2,
  dodgeRating: (mobId + 1) * 3,
  firstHitRating: (mobId + 3) * 4,
};
console.log(mob);

我不了解您,但是在哪个世界里11 * 15 =1650。这是在发送间隔之前的计算,因此它不会弄乱那里。最初的计算很奇怪。

注意:可能值得注意的是,我通过套接字事件来执行此操作: socket.on('fight mob', (mobId) => { 我怀疑这是问题所在,但现在我茫然。

2 个答案:

答案 0 :(得分:1)

之所以发生这种情况,是因为您的mobId变量是字符串,而不是数字。

(1 + 10)* 15 = 165

(“ 1” + 10)* 15 = 1650

要解决此问题,您可以使用Number()来强制mobId的类型:

(Number(mobId)+ 10)* 15 = 165

祝你好运!

答案 1 :(得分:1)

由于类型松散,JavaScript在对变量执行操作时会自动尝试更改变量的类型。在您的情况下,django-elasticsearch-dsl是字符串而不是数字。因此,JavaScript会执行串联操作,而不是附加操作。

所以操作

mobId

由于(mobId + 10) * 15 mobId变成了这样的东西:

'1'

同样,JavaScript的类型转换程序开始起作用,但是这次它将字符串转换为数字以进行乘法运算,因此结果变为'110' * 15

为减轻压力,请先将1650转换为数字。为此,请使用mobIdparseInt

parseFloat