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

Cod*_*key 3 javascript string numbers

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

var numberOfCats = prompt("How many cats?");
var tooManyCats = numberOfCats + 1;
Run Code Online (Sandbox Code Playgroud)

如果我3prompt框中键入 number然后选中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");
Run Code Online (Sandbox Code Playgroud)

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

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

T.J*_*der 5

它之所以有效,是因为不一样+*在进行乘法之前,如有必要,将其操作数转换为数字,因此*表达式始终会产生一个数字值(即使该值为NaN)(如果两个操作数都是 BigInt,则为 BigInt),而+可能会产生一个数字(或 BigInt) 或字符串,具体取决于其操作数。(实际上,+它是唯一一种不总是产生数字或 BigInt 的经典数学运算符;-, /, %, 并且*总是如此)。days数字也是如此,因为它是*(在 BigInts 之外的其他东西上)的结果。


关于BigInts:唯一的一次+-/*,和%运营商的表达导致BigInts是,如果这两个操作数都是BigInts,不存在隐式转换。如果只有一个操作数是 BigInt,则该操作会引发 TypeError。