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 試一試

引號中的值指示字符串值。

紅色的值指示了(某些)程序員也許不希望的值。