【问题标题】:My code gives me a NaN value when i add a var next to a number当我在数字旁边添加一个 var 时,我的代码给了我一个 NaN 值
【发布时间】:2019-01-11 17:13:25
【问题描述】:

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.1 高度

java.js:137 NaN NaN

java.js:140 john 的 bmi 比 mark 大吗?假的

【问题讨论】:

  • 因为它们不是整数。它们是带有公斤或其他东西的字符串。
  • 2.10 + "m" === "2.10m"
  • + 如果两个参数都是数字,则为加法,否则为连接。 * 总是乘法,它要求两个参数都是数字。如果其中一个不是数字,则返回 NaN
  • 您正在使数字值成为附加 kg 和 m 的字符串(在您的输出中最后执行此操作),直到您执行算术运算(第 5 部分中的除法) ) 它窒息。 NaN = 不是数字。通过不将单位附加到数字(将它们转换为字符串)来将变量视为数字。 Javascript 进行了大量的动态转换,它是您需要非常小心的语言的一部分。

标签: javascript var


【解决方案1】:

JavaScript 数字是无单位的。您似乎正在尝试为它们分配单位(kgm)。当您执行(45+mass) 时,结果是一个字符串,因为mass 是一个字符串,所以+ 进行字符串连接。之后,该字符串无法完全转换回数字(因为kg 没有数字含义),因此从字符串转换为数字的结果为NaN

相反,只使用数字(参见 cmets);添加单位后缀仅用于显示:

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;
  • 在数字文字的小数部分末尾尾随0s 不会做任何事情。 1.501.5 是完全相同的数字。 (如果您愿意,可以将0s 放在那里,但它在代码中没有任何意义。)

【讨论】:

    猜你喜欢
    • 2020-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多