簡體   English   中英

為什么即使輸入的數字是 Javascript 中的字符串,年齡計算器也能正常工作?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM