JavaScript 教程

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 Break JS 类型转换 JS 位运算符 JS 正则表达式 JS 错误处理 JS 作用域 JS Hoisting JS 严格模式 JS this 关键词 JS Let 关键词 JS Const 关键词 JS 箭头函数 JS 类 JS 调试 JS 样式指南 JS 最佳实践 JS 常见错误 JS 性能优化 JS 保留关键词 JS 版本 JS ES5 JS ES6 JS JSON

JS 表单

JS Forms Forms API

JS 对象

Object 对象定义 Object 对象属性 Object 对象方法 Object Display Object 对象访问器 Object 对象构造器 Object 对象原型 Object ECMAScript 5

JS 函数

JS 函数定义 JS 函数参数 JS 函数调用 JS Call 函数 JS Apply 函数 JS 函数闭包

JS 类库

Class 类简介 Class 类继承 Class Static

JS 异步

JS 回调 JS 异步 JS Promises JS Async/Await

JS HTML DOM

DOM 简介 DOM 方法 DOM 文档 DOM 元素 DOM HTML DOM CSS DOM 动画 DOM 事件 DOM 事件监听 DOM 导航 DOM 节点 DOM 集合 DOM 节点列表

JS 浏览器 BOM

JS Window JS Screen JS Location JS History JS Navigator JS 弹出框 JS Timing JS Cookies

JS AJAX

AJAX 简介 AJAX XMLHttp AJAX 请求 AJAX 响应 AJAX XML 文件 AJAX PHP AJAX ASP AJAX 数据库 AJAX 应用程序 AJAX 实例

JS JSON

JSON 简介 JSON 语法 JSON vs XML JSON 数据类型 JSON 解析 JSON 字符串化 JSON 对象 JSON 数组 JSON PHP JSON HTML JSON JSONP

JS Web APIs

Web API 简介 Web History API Web Storage API Web Geolocation API

JS vs jQuery

jQuery 选择器 jQuery HTML jQuery CSS jQuery DOM

JS 实例

JS 实例 JS HTML DOM JS HTML 输入 JS HTML 对象 JS HTML 事件 JS Browser JS 编辑器 JS 练习 JS 测验

JS 参考手册

JS 对象 HTML DOM 对象



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

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

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