Мой код дает мне значение NaN, когда я добавляю переменную рядом с числом - PullRequest
0 голосов
/ 11 января 2019

Значение NaN появляется в консоли, и я не знаю почему. Что не так в моем коде?

var mass = 'kg';
var height = 'm';

var markMass = (45+mass);
console.log('Marks Mass is'+' '+markMass);

var johnMass = (67+mass);
console.log('John Mass is'+' '+johnMass);

var johnHeight = (1.60+height);
console.log('John height is'+' '+johnHeight);

var markHeight = (2.10+height);
console.log('Mark heigth is'+' '+markHeight);

var bmiJohn = johnMass / (johnHeight * johnHeight);
var bmiMark = markMass / (markHeight * markHeight);
console.log(bmiJohn, bmiMark);

var whoHasMore = bmiJohn > bmiMark;
console.log('has john a bigger bmi than mark?'+' '+whoHasMore);

java.js: 124 45масс

java.js: 127 67масс

java.js: 130 1,6 высота

java.js: 133 2.1height

java.js: 137 NaN NaN

java.js: 140 имеет Джону больше, чем Марк? ложь

1 Ответ

0 голосов
/ 11 января 2019

JavaScript числа без единицы. Вы, кажется, пытаетесь назначить им единицы (kg, m). Когда вы делаете (45+mass), результатом является строка, потому что mass является строкой и поэтому + выполняет конкатенацию строк. Позже эта строка не может быть полностью преобразована обратно в число (потому что kg не имеет числового значения), и поэтому преобразование из строки в число приводит к NaN.

Вместо этого просто работайте с числами (см. Комментарии); добавьте суффиксы единиц для отображения только:

var mass = 'kg';
var height = 'm';

var markMass = 45; // *** Not (45+mass)
console.log('Marks Mass is'+' '+markMass+mass); // *** Add mass suffix here for display

var johnMass = 67; // ***
console.log('John Mass is'+' '+johnMass+mass); // ***

var johnHeight = 1.6; // ***
console.log('John height is'+' '+johnHeight+height); // ***

var markHeight = 2.1; // ***
console.log('Mark height is'+' '+markHeight+height);

var bmiJohn = johnMass / (johnHeight * johnHeight);
var bmiMark = markMass / (markHeight * markHeight);
console.log(bmiJohn, bmiMark);

var whoHasMore = bmiJohn > bmiMark;
console.log('has john a bigger bmi than mark?'+' '+whoHasMore);

Дополнительные примечания:

  • В var x = (y + z); эти () вообще не преследуют никакой цели, просто используйте var x = y + z;
  • Трейлинг 0 s в конце дробной части числового литерала ничего не делает. 1.50 и 1.5 - это одно и то же число. (Вы можете поместить 0 s, если хотите, но это не имеет никакого значения в коде.)
...