2025-05-22 08:35:51

JavaScript类型转换

❮ 上一节

下一节 ❯

JavaScript 类型转换

Number() 转换数值,String() 转换字符串,Boolean() 转换布尔值。

JavaScript 数据类型

JavaScript 中有五种可包含值的数据类型:

字符串(string)

数字(number)

布尔(boolean)

对象(object)

函数(function)

有六种对象类型:

对象(Object)

日期(Date)

数组(Array)

字符串(String)

数字(Number)

布尔(Boolean)

同时有两种不能包含值的数据类型:

null

undefined

typeof 运算符

您可以使用 typeof 运算符来确定 JavaScript 变量的数据类型。

实例

typeof "John" // 返回 "string"

typeof 3.14 // 返回 "number"

typeof NaN // 返回 "number"

typeof false // 返回 "boolean"

typeof [1,2,3,4] // 返回 "object"

typeof {name:'John', age:34} // 返回 "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 变量的构造器函数。

实例

"John".constructor // 返回 function String() {[本机代码]}

(3.14).constructor // 返回 function Number() {[本机代码]}

false.constructor // 返回 function Boolean() {[本机代码]}

[1,2,3,4].constructor // 返回 function Array() {[本机代码]}

{name:'John',age:34}.constructor // 返回 function Object() {[本机代码]}

new Date().constructor // 返回 function Date() {[本机代码]}

function () {}.constructor // 返回 function Function(){[本机代码]}

亲自试一试 »

您可以通过检查 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()) // 返回 "Thu Jul 17 2014 15:38:19 GMT+0200 (W. Europe Daylight Time)"

日期方法 toString() 同理。

实例

Date().toString() // 返回 "Thu Jul 17 2014 15:38:19 GMT+0200 (W. Europe Daylight Time)"

在日期方法这一章,您能够找到更多可用于把日期转换为字符串的方法:

方法

描述

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(非数字):

实例

var y = "John";

//y 是一个字符串

var x = + y; // x 是一个数字 (NaN)

亲自试一试 »

把布尔转换数值

全局方法 Number() 也可把布尔转换为数字。

Number(false) // 返回 0

Number(true) // 返回 1

把日期转换为数字

全局方法 Number() 可用于把日期转换为数字。

d = new Date();Number(d) // 返回 1404568027739

日期方法 getTime() 同理。

d = new Date();d.getTime() // 返回 1404568027739

自动类型转换

如果 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;

// if myVar = {name:"Fjohn"} // toString 转换为 "[object Object]"

// if myVar = [1,2,3,4] // toString 转换为 "1,2,3,4"

// if myVar = new Date() // toString 转换为 "Fri Jul 18 2014 09:08:55 GMT+0200"

数字和布尔也会被转换,但并不明显:

// if myVar = 123 // toString 转换为 "123"

// if myVar = true // toString 转换为 "true"

// if 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

试一试 »

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

红色的值 指示了(某些)程序员也许不希望的值。

❮ 上一节

下一节 ❯

基本解释
埙的选择