为什么年龄计算器即使在Javascript中输入的数字是字符串也能工作?

为什么年龄计算器即使在Javascript中输入的数字是字符串也能工作?,javascript,string,numbers,Javascript,String,Numbers,在提示符中用户的响应是一个字符串。即使响应是一个数字,它也会以字符串的形式返回。因此,我在控制台中添加了一些内容: var numberOfCats = prompt("How many cats?"); var tooManyCats = numberOfCats + 1; 如果我在提示符框中键入编号3,然后选中tooManyCats,结果是:31。因为Javascript不能使用字符串和数字进行计算。因此,它将数字1添加到它的旁边 但是对于这个例子,出于某种原因,它并没

提示符中
用户的响应是一个字符串。即使响应是一个数字,它也会以字符串的形式返回。因此,我在控制台中添加了一些内容:

var numberOfCats = prompt("How many cats?");
var tooManyCats = numberOfCats + 1;
如果我在
提示符
框中键入编号
3
,然后选中
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
,它会提醒我:
20年大约是7305天


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

它之所以有效,是因为与
+
不同,
*
在执行乘法之前,如果有必要,将其操作数转换为数字,因此
*
表达式总是产生一个数值(即使该值是
NaN
)(如果两个操作数都是BigInt,则为BigInt),而
+
可能会生成数字(或BigInt)或字符串,具体取决于其操作数。(事实上,
+
是经典数学运算符中唯一一个不总是产生数字或BigInt的;
-
/
%
,和
*
总是这样。)因此
是一个数字,因为它是
*
(在BigInt以外的事物上)的结果



关于BigInt:只有当
+
-
/
*
%
运算符表达式产生BigInt时,如果两个操作数都是BigInt,则不存在隐式转换。如果只有一个操作数是BigInt,则该操作会抛出类型错误。

如果您输入的是字符串或数字,则为y。有时输入不正确,由您来更改。您可以使用number()方法将字符串转换为数字。或者如T.J.Crowder所述,您可以将字符串乘以1,得到一个数字(numberOfCats*1)。

您的第二个输入是乘法(*)。这不能简单地添加为字符串,因此JS将响应您输入的乘法。第一项是加法(+),它将字符串视为串联,而不是方程式。

如果输入为数字,则Javascript始终使用“+”运算符进行串联。但如果使用诸如*,/,%之类的运算符,则它始终将以数字格式输入的字符串转换为数字

5+'5'=55
5*'5'
如果Javascript将其作为字符串进行教学,那么它就没有任何意义。 类似地,对于*、/、%。

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