JavaScript 類型轉換
Number()
轉換數值,String()
轉換字符串,Boolean()
轉換布爾值。
JavaScript 數據類型
JavaScript 中有五種可包含值的數據類型:
- 字符串(string)
- 數字(number)
- 布爾(boolean)
- 對象(object)
- 函數(function)
有三種對象類型:
- 對象(Object)
- 日期(Date)
- 數組(Array)
同時有兩種不能包含值的數據類型:
- null
- undefined
typeof 運算符
您可以使用 typeof
運算符來確定 JavaScript 變量的數據類型。
實例
typeof "Bill" // 返回 "string" typeof 3.14 // 返回 "number" typeof NaN // 返回 "number" typeof false // 返回 "boolean" typeof [1,2,3,4] // 返回 "object" typeof {name:'Bill', age:62} // 返回 "object" typeof new Date() // 返回 "object" typeof function () {} // 返回 "function" typeof myCar // 返回 "undefined" * typeof null // 返回 "object"
請注意:
- NaN 的數據類型是數值
- 數組的數據類型是對象
- 日期的數據類型是對象
- null 的數據類型是對象
- 未定義變量的數據類型是 undefined
- 尚未賦值的變量的數據類型也是 undefined
您無法使用 typeof
去判斷 JavaScript 對象是否是數組(或日期)。
typeof 的數據類型
typeof
運算符不是變量。它屬于運算符。運算符(比如 +
-
*
/
)沒有數據類型。
但是,typeof
始終會返回字符串(包含運算數的類型)。
constructor 屬性
constructor
屬性返回所有 JavaScript 變量的構造器函數。
實例
"Bill".constructor // 返回 "function String() { [native code] }" (3.14).constructor // 返回 "function Number() { [native code] }" false.constructor // 返回 "function Boolean() { [native code] }" [1,2,3,4].constructor // 返回 "function Array() { [native code] }" {name:'Bill', age:62}.constructor // 返回" function Object() { [native code] }" new Date().constructor // 返回 "function Date() { [native code] }" function () {}.constructor // 返回 "function Function(){ [native code] }"
您可以通過檢查 constructor
屬性來確定某個對象是否為數組(包含單詞 "Array"):
實例
function isArray(myArray) { return myArray.constructor.toString().indexOf("Array") > -1; }
或者更簡單,您可以檢查對象是否是數組函數:
實例
function isArray(myArray) { return myArray.constructor === Array; }
您可以通過檢查 constructor
屬性來確定某個對象是否為日期(包含單詞 "Date"):
實例
function isDate(myDate) { return myDate.constructor.toString().indexOf("Date") > -1; }
或者更簡單,您可以檢查對象是否是日期函數:
實例
function isDate(myDate) { return myDate.constructor === Date; }
JavaScript 類型轉換
JavaScript 變量能夠被轉換為新變量以及另一種數據類型:
- 通過使用 JavaScript 函數
- 通過 JavaScript 本身自動轉換
把數值轉換為字符串
全局方法 String()
能夠把數字轉換為字符串。
它可用于任意類型的數字、文字、變量或表達式:
實例
String(x) // 從數值變量 x 返回字符串 String(123) // 從數值文本 123 返回字符串 String(100 + 23) // 從表達式中的數值返回字符串
數字方法 toString()
同理。
實例
x.toString() (123).toString() (100 + 23).toString()
在數字方法這一章,您將學到更多可用于將數值轉換為字符串的方法:
方法 | 描述 |
---|---|
toExponential() | 返回字符串,對數字進行舍入,并使用指數計數法來寫。 |
toFixed() | 返回字符串,對數字進行舍入,并使用指定位數的小數來寫。 |
toPrecision() | 返回字符串,把數字寫為指定的長度。 |
把布爾轉換為字符串
全局方法 String()
能夠將布爾轉換為字符串。
String(false) // 返回 "false" String(true) // 返回 "true"
布爾方法 toString()
同理。
false.toString() // 返回 "false" true.toString() // 返回 "true"
把日期轉換為字符串
全局方法 String()
可將日期轉換為字符串。
String(Date())
日期方法 toString()
同理。
實例
Date().toString()
在日期方法這一章,您能夠找到更多可用于把日期轉換為字符串的方法:
方法 | 描述 |
---|---|
getDate() | 獲得以數值計(1-31)的日 |
getDay() | 或者以數值計(0-6)的周 |
getFullYear() | 獲得四位的年(yyyy) |
getHours() | 獲得時(0-23) |
getMilliseconds() | 獲得毫秒(0-999) |
getMinutes() | 獲得分鐘(0-59) |
getMonth() | 獲得月(0-11) |
getSeconds() | 獲得秒(0-59) |
getTime() | 獲得時間(1970 年 1 月 1 日以來的毫秒) |
把字符串轉換為數值
全局方法 Number()
可把字符串轉換為數字。
包含數字的字符串(比如 "3.14")轉換為數字(比如 3.14)。
空的字符串轉換為 0。
其他字符串將轉換為 NaN
(Not a number,不是數字)。
Number("3.14") // 返回 3.14 Number(" ") // 返回 0 Number("") // 返回 0 Number("99 88") // 返回 NaN
在數字方法這一章中,您將找到更多可用于把字符串轉換為數字的方法:
方法 | 描述 |
---|---|
parseFloat() | 解析字符串并返回浮點數。 |
parseInt() | 解析字符串并返回整數。 |
一元 + 運算符
一元的 +
運算符可用于把變量轉換為數字:
實例
var y = "5"; // y 是字符串 var x = + y; // x 是數字
如果無法轉換變量,則仍會成為數字,但是值為 NaN
(Not a number):
實例
var y = "Bill"; // y 是字符串 var x = + y; // x 是數字 (NaN)
把布爾轉換數值
全局方法 Number()
也可把布爾轉換為數字。
Number(false) // 返回 0 Number(true) // 返回 1
把日期轉換為數字
全局方法 Number()
可用于把日期轉換為數字。
d = new Date(); Number(d)
日期方法 getTime()
同理。
d = new Date(); d.getTime()
自動類型轉換
如果 JavaScript 嘗試操作一種“錯誤”的數據類型,它會試圖將該值轉換為“正確”的類型。
結果并不總是你所期望的:
5 + null // 返回 5 因為 null 被轉換為 0 "5" + null // 返回 "5null" 因為 null 被轉換為 "null" "5" + 2 // 返回 52 因為 2 被轉換為 "2" "5" - 2 // 返回 3 因為 "5" 被轉換為 5 "5" * "2" // 返回 10 因為 "5" 和 "2" 被轉換為 5 和 2
自動字符串轉換
JavaScript 自動調用變量的 toString()
函數,當您試圖“輸出”對象或變量時:
document.getElementById("demo").innerHTML = myVar; // 如果 myVar = {name:"Fjohn"} // toString 轉換為 "[object Object]" // 如果 myVar = [1,2,3,4] // toString 轉換為 "1,2,3,4" // 如果 myVar = new Date() // toString 轉換為 ""
數字和布爾也會被轉換,但并不明顯:
// 如果 myVar = 123 // toString 轉換為 "123" // 如果 myVar = true // toString 轉換為 "true" // 如果 myVar = false // toString 轉換為 "false"
JavaScript 類型轉換表
下表中列出了將不同 JavaScript 值轉換為數字、字符串和布爾的結果:
原始值 | 轉換為數字 | 轉換為字符串 | 轉換為邏輯 | 試一試 |
---|---|---|---|---|
false | 0 | "false" | false | 試一試 |
true | 1 | "true" | true | 試一試 |
0 | 0 | "0" | false | 試一試 |
1 | 1 | "1" | true | 試一試 |
"0" | 0 | "0" | true |
試一試 |
"000" | 0 | "000" | true |
試一試 |
"1" | 1 | "1" | true | 試一試 |
NaN | NaN | "NaN" | false | 試一試 |
Infinity | Infinity | "Infinity" | true | 試一試 |
-Infinity | -Infinity | "-Infinity" | true | 試一試 |
"" | 0 |
"" | false |
試一試 |
"20" | 20 | "20" | true | 試一試 |
"twenty" | NaN | "twenty" | true | 試一試 |
[ ] | 0 |
"" | true | 試一試 |
[20] | 20 |
"20" | true | 試一試 |
[10,20] | NaN | "10,20" | true | 試一試 |
["twenty"] | NaN | "twenty" | true | 試一試 |
["ten","twenty"] | NaN | "ten,twenty" | true | 試一試 |
function(){} | NaN | "function(){}" | true | 試一試 |
{ } | NaN | "[object Object]" | true | 試一試 |
null | 0 |
"null" | false | 試一試 |
undefined | NaN | "undefined" | false | 試一試 |
引號中的值指示字符串值。
紅色的值指示了(某些)程序員也許不希望的值。