橘子味的心
标题:JavaScript类型转换


Number() 转换为数字, String() 转换为字符串, Boolean() 转换为布尔.


JavaScript 数据类型

在JavaScript中有5种不同的数据类型可以包含的值有:

  • string
  • number
  • boolean
  • object
  • function

有3种对象类型:

  • Object
  • Date
  • Array

2个数据类型,不能包含值:

  • null
  • undefined

typeof 运算符

你可以使用typeof运算符来找到一个JavaScript变量的数据类型.

typeof "John"                 // Returns "string"
typeof 3.14                   // Returns "number"
typeof NaN                    // Returns "number"
typeof false                  // Returns "boolean"
typeof [1,2,3,4]              // Returns "object"
typeof {name:'John', age:34}  // Returns "object"
typeof new Date()             // Returns "object"
typeof function () {}         // Returns "function"
typeof myCar                  // Returns "undefined" *
typeof null                   // Returns "object"

让我试试

请注意:

  • NaN 的数据类型是 number
  • 数组的数据类型是 object
  • 日期的数据类型是 object
  • null 的数据类型是 object
  • 未定义变量的数据类型是 undefined *
  • 未赋值的变量的数据类型也未定义 *

你不能使用typeof来确定一个JavaScript数组和日期的类型.


typeof的数据类型

typeof 操作符不是一个变量. 它是一个操作符. 操作符 ( + - * / ) 没有任何数据类型.

但是,typeof 运算符总是返回包含操作数类型的字符串.


构造函数属性

构造函数属性返回所有JavaScript变量的构造函数.

"John".constructor                 // Returns "function String()  { [native code] }"
(3.14).constructor                 // Returns "function Number()  { [native code] }"
false.constructor                  // Returns "function Boolean() { [native code] }"
[1,2,3,4].constructor              // Returns "function Array()   { [native code] }"
{name:'John', age:34}.constructor  // Returns" function Object()  { [native code] }"
new Date().constructor             // Returns "function Date()    { [native code] }"
function () {}.constructor         // Returns "function Function(){ [native code] }"

让我试试

您可以检查构造函数以查明对象是否为数组(包含“Array”):

构造函数属性返回所有JavaScript变量的构造函数.

function isArray(myArray) {
    return myArray.constructor.toString().indexOf("Array") > -1;
}

让我试试


JavaScript 类型转换

JavaScript 变量可以被转换为新变量和其他数据类型:

  • 通过使用JavaScript函数
  • 自动转换

转换数字为字符串

全局方法String()能转换数字为字符串.

它可以用在任何类型的数字、常量、变量或表达式:

String(x)         // returns a string from a number variable x
String(123)       // returns a string from a number literal 123
String(100 + 23)  // returns a string from a number from an expression

让我试试

Number方法toString()也有相同的作用

x.toString()
(123).toString()
(100 + 23).toString()

让我试试

在Number一章中, 你会发现更多的方法可以用来将数字转换为字符串:

方法 描述
toExponential() 返回一个字符串,用一个数字舍入并用指数符号书写.
toFixed() 返回一个字符串,用一个数字舍入并用小数书写.
toPrecision() 返回具有指定长度的数字的字符串

将布尔值的字符串

全局方法String()可以将布尔转换成字符串.

String(false)        // returns "false"
String(true)         // returns "true"

Boolean方法toString()也有相同的作用

false.toString()     // returns "false"
true.toString()      // returns "true"

将日期转换为字符串

全局方法String()可以将日期转换成字符串.

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

Date方法toString()也有相同的作用

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

在日期一章里, 你会发现更多的方法,可以用来转换日期字符串:

方法 描述
getDate() 获得月里的一天(1-31)
getDay() 获得周里的一天 (0-6)
getFullYear() 获得4为数字的年 (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")    // returns 3.14
Number(" ")       // returns 0
Number("")        // returns 0
Number("99 88")   // returns NaN

在Number一章里, 你会发现更多的方法,可以用来转换字符串到数字:

方法 描述
parseFloat() 将一个字符串转换为一个浮点数
parseInt() 将一个字符串转换为一个整数

一元 + 操作符

一元 + 操作符将一个变量转换为数字:

var y = "5";      // y is a string
var x = + y;      // x is a number

让我试试

如果变量不能被转换,它仍然会成为一个数字, 但是他的值是 NaN (Not a number):

var y = "John";   // y is a string
var x = + y;      // x is a number (NaN)

让我试试


将布尔转换为数字

全局方法Number()能将布尔转换为数字.

Number(false)     // returns 0
Number(true)      // returns 1

将日期转换为数字

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

d = new Date();
Number(d)          // returns 1404568027739

日期方法getTime() 有同样的效果.

d = new Date();
d.getTime()        // returns 1404568027739

自动类型转换

当JavaScript试图操作“错误”的数据类型时,它将值转换为一个“正确”的类型.

结果并不总是你所期望的:

5 + null    // returns 5         because null is converted to 0
"5" + null  // returns "5null"   because null is converted to "null"
"5" + 2     // returns 52        because 2 is converted to "2"
"5" - 2     // returns 3         because "5" is converted to 5
"5" * "2"   // returns 10        because "5" and "2" are converted to 5 and 2

让我试试


自动字符串转换

JavaScript自动调用变量的toString()函数当你试图“输出”的一个对象或变量:

document.getElementById("demo").innerHTML = myVar;

// if myVar = {name:"Fjohn"}  // toString converts to "[object Object]"
// if myVar = [1,2,3,4]       // toString converts to "1,2,3,4"
// if myVar = new Date()      // toString converts to "Fri Jul 18 2014 09:08:55 GMT+0200"

数字和布尔值进行转换,但这是不可见的:

// if myVar = 123             // toString converts to "123"
// if myVar = true            // toString converts to "true"
// if myVar = false           // toString converts to "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 让我试试

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


目录

分类