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 45mass
java.js:127 67mass
java.js:130 1.6高度
java.js:133 2.1高度
java.js:137 NaN NaN
java.js:140约翰的bmi比马克大吗?错误
答案 0 :(得分:1)
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
不会执行任何操作。 1.50
和1.5
是完全相同的数字。 (您可以根据需要将0
放在此处,但是在代码中没有任何意义。)