导航
×
   ❮   
HTML CSS JavaScript PHP Go ECMS

JavaScript 教程

JS 简介 JS 如何使用 JS 输出 JS 语法 JS 语句 JS 注释 JS 变量 JS 运算符 JS 条件语句 JS 循环 JS 字符串 JS 数字 JS 函数 JS 对象 JS 日期 JS 数组 JS 类型化数组 JS 集合 JS Map 映射 JS Math JS 正则表达式 JS 数据类型 JS 错误 JS 事件 JS 编程 JS 关键字参考 JS 保留关键字参考 JS 运算符参考 JS 运算符优先级 JS UTF-8 字符 JS UTF-8 符号 JS UTF-8 表情符号 JS 版本

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 试一试 »

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

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


freew3c.com 中文网是独立运营的中文开发者学习平台,与 freew3c.com 无关联。提供的内容仅用于学习和测试,不保证内容的正确性。


Copyright @2020-2026 京ICP备888888号-8