2016-03-26 3 views
2

Я пытаюсь вычесть значение objectProperty объекта object1 из свойства объекта object2, и я продолжаю получать NaN на консоли. Вот пример кода:Добавление свойств объекта в JavaScript

object1.objectProperty - object2.object2Property 

Если этого недостаточно, я могу опубликовать полный код из моего проекта. Если есть другой способ сделать это или какую-то функцию, которая может помочь, сообщите мне.

редактировать: Вот код ..

var myPokemon = { 
    health: 25, 
    defense: 5, 
    attack: 10, 
    speed: 5 
}; 

var moves = { 
    Scratch: 5, 
    Bite: 5, 
    Slap: 5, 
    Growl: 1 
}; 


var computerPokemon = { 
    health: 20, 
    defense: 5, 
    attack: 10, 
    speed: 7 
}; 

function calcDamage(firstPokemon, secondPokemon, move) { 
    if(move == moves.Growl){ 
     //starts here 
     var newDefense = moves.Growl - firstPokemon.defense; 
     console.log(newDefense); 
     //ends here 
    }else{ 
    var newHealth = (firstPokemon.health + firstPokemon.defense) - (secondPokemon.attack + move); 
    console.log(newHealth); 
    } 
} 

редактировать: Когда я moves.Growl - firstPokemon.defense || 0; вернулся -4 вместо NaN, который является то, что я хотел, чтобы это сделать, но человек, который ответил, что удалили ответьте так, на что этому ответил тот, кто этот парень.

+0

вы проверили значение в этих свойствах? –

+0

При получении 'NaN' вы чаще всего имеете переменную' undefined' где-то в вашем коде. – str

+0

Можете ли вы рассказать, что является значением 'firstPokemon.defense', когда вы получаете NaN –

ответ

1

Проблема в том, что вы добавляете объект во второй аргумент. Кроме того, ваш, если заявление не будет выполняться, я закрепил как в следующем

 var myPokemon = { 
 
    \t health: 25, 
 
    \t defense: 5, 
 
    \t attack: 10, 
 
    \t speed: 5 
 
    }; 
 
    
 
    var moves = { 
 
    \t Scratch: 5, 
 
    \t Bite: 5, 
 
    \t Slap: 5, 
 
    \t Growl: 1 
 
    }; 
 
    
 
    
 
    var computerPokemon = { 
 
    \t health: 20, 
 
    \t defense: 5, 
 
    \t attack: 10, 
 
    \t speed: 7 
 
    }; 
 
    
 
    function calcDamage(firstPokemon, secondPokemon, move) { 
 
    \t if(moves.Growl!=undefined){ 
 
      //starts here 
 
    \t \t var newDefense = moves.Growl - firstPokemon.defense; 
 
    \t \t alert(newDefense); 
 
      //ends here 
 
    \t }else{ 
 
    \t var newHealth = (Number(firstPokemon.health) + Number(firstPokemon.defense)) - (Number(secondPokemon.attack) + Number(move.Growl)); 
 
    \t alert(newHealth); 
 
     } 
 
    } 
 

 
calcDamage(myPokemon,computerPokemon,moves)

+0

, и ваш оператор if не будет работать (перемещается == move.Growl), если вы хотите проверить move.Growl существуют тогда делайте это как move.Growl! = undefined –

+1

Я думаю, что он проверяет значения перемещения и перемещений. И не пытаться проверить, существует ли она, нет –

+1

ОК, большое спасибо за код. –

1

Используйте parseInt, чтобы преобразовать значения в целое число, а затем выполнить математику.

var value = parseInt(object1.objectProperty,10) - parseInt(object2.object2Property,10); 

Проблема здесь

var newHealth = (Number(firstPokemon.health) + Number(firstPokemon.defense)) - (Number(secondPokemon.attack) + Number(move.Growl)); 

Последний один Number(move.Growl) он должен быть Number(moves.Growl)moves не move. В вашем случае move - это всего лишь номер, и вы пытаетесь использовать Number(move.Growl), который будет NaN и, следовательно, ваш NaN.

+0

Это не проблема parseInt, проблема что его код не добавлял и не выполнял условные утверждения правильно, но ваш ответ хорош для тех, кто пытается добавить строки –

1

Обычно, если вы получаете NaN, вы, вероятно, работать с другими элементами, но числами. Вы уверены, что они оба являются цифрами?

Просто пример:

var x = {}, y = {}; 
x.r = 10; 
y.r = 5; 
x.r - y.r; // yields 5 
Смежные вопросы