[英]Why does age calculator work even when the input number is a string in Javascript?
在prompt
中,用戶的響應是一個字符串。 即使響應是數字,它也會以字符串形式返回。 所以我在控制台做了一些補充:
var numberOfCats = prompt("How many cats?");
var tooManyCats = numberOfCats + 1;
如果我在prompt
框中鍵入數字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");
如果我在prompt
框中輸入20
,它會提醒我: 20 years is roughly 7305 days
我不明白為什么第二個沒有任何問題。 是因為 Javascript 以自己獨特的方式看到字符串和數字,還是背后有某種原因?
它之所以有效,是因為與+
不同, *
在進行乘法之前必要時將其操作數轉換為數字,因此*
表達式總是產生一個數字值(即使該值是NaN
)(如果兩個操作數都是 BigInts,則為 BigInt),而+
可能結果是一個數字(或 BigInt)或一個字符串,這取決於它的操作數。 (事實上, +
是唯一一個並不總是產生數字或 BigInt 的經典數學運算符; -
、 /
、 %
和*
總是如此)。 所以days
是一個數字,因為它是*
的結果(在 BigInts 之外的其他東西上)。
關於 BigInts:唯一一次+
、 -
、 /
、 *
和%
運算符表達式導致 BigInts 是如果兩個操作數都是 BigInts,則沒有隱式轉換。 如果只有一個操作數是 BigInt,則該操作會引發 TypeError。
Javascript 會自動判斷您輸入的是字符串還是數字。 有時它不正確,由您來更改它。 您可以使用 Number() 方法將字符串轉換為數字。 或者如 TJ Crowder 所述,您可以將字符串乘以 1 得到一個數字 (numberOfCats*1)。
您的第二個條目是乘法 (*)。 這不能簡單地作為字符串添加,因此 JS 會以您輸入的乘法答案作為響應。 第一個條目是加法 (+),它將字符串視為連接而不是等式。
如果輸入是數字,Javascript 始終與“+”運算符連接。 但是對於像 *,/,% 這樣的運算符,它總是將以數字格式輸入的字符串轉換為數字。
5+'5'=55
如果 Javascript 將其作為字符串進行教學,則5*'5'
沒有任何意義。 *,/,% 也類似。
在 javascript 中,用於加法的“+”運算符也重載了“+”作為連接運算符,它是根據操作數自動確定的。 如果任何操作數是一個字符串,它將被連接起來。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.