在 JavaScript 中,Number(value) 常被拿來驗證數字的型別,它會嘗試將 value 轉換為數字,可能會發生以下幾種情況:
1. 數字類型 (number)
如果 value 本身是數字,則 Number(value) 會回傳該數字
console.log(Number(42)); // 42
console.log(Number(-3.14)); // -3.14
console.log(Number(0)); // 02. 數字型字串 (string)
如果 value 是「數字格式的字串」,會成功轉換為數字
console.log(Number("42")); // 42
console.log(Number("3.14")); // 3.14
console.log(Number("-100")); // -100
console.log(Number("0")); // 0
console.log(Number(" 123 "));// 123 (前後空格會被忽略)注意:包含非數字的字串(例如 "42px")不會被正確轉換(見情況 5)。
3. null
null 會轉換為 0
console.log(Number(null)); // 04. true 和 false
布林值 true 轉換為 1,false 轉換為 0
console.log(Number(true)); // 1
console.log(Number(false)); // 05. 非數字字串 (string,但非數字格式)
如果 value 是非數字的字串,會回傳 NaN
console.log(Number("hello")); // NaN
console.log(Number("123abc")); // NaN
console.log(Number("42px")); // NaN
console.log(Number("")); // 0 (特殊情況)
console.log(Number(" ")); // 0 (特殊情況)注意:
- 空字串 (
"") 或 只含空格的字串 (" ") 會轉換為0。 - 任何包含非數字字元(如
"42px"、"abc")都會變NaN。
6. undefined
undefined 會轉換為 NaN
console.log(Number(undefined)); // NaN
7. NaN
NaN 仍然是 NaN(不是數字)
console.log(Number(NaN)); // NaN8. Infinity 和 Infinity
Infinity 和 -Infinity 會保持不變
onsole.log(Number(Infinity)); // Infinity
console.log(Number(-Infinity)); // -Infinity9. 物件 (object)
物件無法轉換,會回傳 NaN
console.log(Number({})); // NaN
console.log(Number({a: 10})); // NaN
console.log(Number([])); // 0 (特殊情況)
console.log(Number([99])); // 99 (單個數字的陣列會轉換)
console.log(Number([1, 2])); // NaN (多個元素的陣列不會轉換)特殊例外:
- 空陣列
[]轉換為0 - 單個數字的陣列
[99]轉換為99 - 多個元素的陣列
[1,2]轉換為NaN
總結
| 類型 | 測試值 | 轉換結果 (Number(value)) |
|---|---|---|
| 數字 | 42 | 42 |
| 數字字串 | "3.14" | 3.14 |
| 布林值 | true | 1 |
false | 0 | |
null | null | 0 |
undefined | undefined | NaN |
| 空字串 | "" | 0 |
| 空白字串 | " " | 0 |
| 非數字字串 | "abc" | NaN |
"42px" | NaN | |
| 物件 | {} | NaN |
| 陣列 | [] | 0 |
[99] | 99 | |
[1, 2] | NaN |
結論
- 數字 & 數字字串 可以成功轉換
null變0,true/false變1/0undefined、非數字字串、物件 變NaN- 空字串 & 空白字串 →
0 - 空陣列變
0,單個數字陣列變該數字,多個數字陣列變NaN
這就是 Number(value1) 可能發生的情況。
