轻松上手,快乐学习!

JS 教程

JS 首页JS 教程JS 简介JS 如何使用JS 输出JS 语句JS 语法JS 注释JS 变量JS 运算符JS 算法JS 赋值JS 数据类型JS 函数JS 对象JS 事件JS 字符串JS 字符串方法JS 数值JS 数值方法JS 数组JS 数组方法JS 数组排序JS 数组迭代JS 日期JS 日期格式JS 日期获取方法JS 日期设置方法JS 数学运算JS 随机数JS 布尔运算符JS 比较运算符JS 条件语句JS Switch 语句JS For 循环JS While 循环JS BreakJS 类型转换JS 位运算符JS 正则表达式JS 错误处理JS 作用域JS HoistingJS 严格模式JS this 关键词JS Let 关键词JS Const 关键词JS 箭头函数JS 类JS 调试JS 样式指南JS 最佳实践JS 常见错误JS 性能优化JS 保留关键词JS 版本JS ES5JS ES6JS JSONJS FormsForms APIObject 对象定义Object 对象属性Object 对象方法Object DisplayObject 对象访问器Object 对象构造器Object 对象原型Object ECMAScript 5JS 函数定义JS 函数参数JS 函数调用JS Call 函数JS Apply 函数JS 函数闭包Class 类简介Class 类继承Class StaticJS 回调JS 异步JS PromisesJS Async/AwaitDOM 简介DOM 方法DOM 文档DOM 元素DOM HTMLDOM CSSDOM 动画DOM 事件DOM 事件监听DOM 导航DOM 节点DOM 集合DOM 节点列表JS WindowJS ScreenJS LocationJS HistoryJS NavigatorJS 弹出框JS TimingJS CookiesAJAX 简介AJAX XMLHttpAJAX 请求AJAX 响应AJAX XML 文件AJAX PHPAJAX ASPAJAX 数据库AJAX 应用程序AJAX 实例JSON 简介JSON 语法JSON vs XMLJSON 数据类型JSON 解析JSON 字符串化JSON 对象JSON 数组JSON PHPJSON HTMLJSON JSONPWeb API 简介Web History APIWeb Storage APIWeb Geolocation APIjQuery 选择器jQuery HTMLjQuery CSSjQuery DOMJS 实例JS HTML DOMJS HTML 输入JS HTML 对象JS HTML 事件JS BrowserJS 编辑器JS 练习JS 测验

JS 参考手册

JS 参考手册(类别排序)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 试一试 »

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

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