为什么即使输入数字是Javascript中的字符串,年龄计算器也可以正常工作?

问题描述

prompt中,用户的响应是一个字符串。即使响应是数字,它也会以字符串形式返回。所以我在控制台中做了一些补充:

var numberOfCats = prompt("How many cats?");
var tooManyCats = numberOfCats + 1;

如果我在3框中键入数字prompt,然后选中tooManyCats,则结果为:31。因为Javascript无法使用字符串和数字进行数学运算。因此,它会在其旁边添加数字1

但是对于这个例子,由于某种原因,它不会弄乱代码在这里,我在控制台中制作了一个年龄计算器。

var age = prompt("What is your age?")
var days = age * 365.25; //.25 is for the leap years
alert(age + " years is roughly " + days + " days");

如果我在20框中键入prompt,它会提醒我:20 years is roughly 7305 days

我不明白为什么第二个没有任何问题。是因为Javascript以自己独特的方式看到字符串和数字,还是背后有某些原因?

解决方法

之所以起作用,是因为与+不同,*会在进行乘法运算之前将其操作数转换为数字,因此*表达式始终会得出数字值(即使该值为NaN)(如果两个操作数均为BigInts,则为BigInt),而+可能根据其操作数而产生数字(或BigInt)或字符串。 (实际上,+ only 的经典数学运算符之一,它并不总是产生数字或BigInt; -/%*总是这样做)。因此days是一个数字,因为它是*的结果(不是BigInts)。


关于BigInts:唯一的+-/*%运算符表达式产生BigInts的原因是 操作数是BigInts,没有隐式转换。如果只有一个操作数是BigInt,则该操作将引发TypeError。

,

Javascript自动确定您输入的输入是字符串还是数字。有时,它是不正确的,取决于您是否要更改它。您可以使用Number()方法将字符串转换为数字。或如T.J.拥挤者可以将字符串乘以1,然后得到一个数字(numberOfCats * 1)。

,

您的第二个输入项是一个乘法(*)。不能简单地将其添加为字符串,因此JS会以您输入的乘法的答案作为响应。第一个条目是加号(+),它将字符串视为串联而不是等式。

,

如果输入为数字,则Javascript始终与'+'运算符连接。但是使用*,/,%之类的运算符总是将以数字格式输入的字符串转换为数字。

5+'5'=55
如果Javascript将其教为字符串,则

5*'5'没有任何意义。 对于*,/,%同样。

,

在用于加法的javascript中,“ +”运算符也重载为“ +”作为并置运算符,它是根据操作数自动确定的。如果任何操作数是字符串,它将被串联。