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

JavaScript 数据类型

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

  • 字符串(string)
  • 数字(number)
  • 布尔(boolean)
  • 对象(object)
  • 函数(function)

有三种对象类型:

  • 对象(Object)
  • 日期(Date)
  • 数组(Array)

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

  • null
  • undefined

    typeof 运算符

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

    实例

    typeof “Bill” // 返回 “string”
    typeof 3.14 // 返回 “number”
    typeof NaN // 返回 “number”
    typeof false // 返回 “boolean”
    typeof [1,2,3,4] // 返回 “object”
    typeof {name:’Bill’, age:62} // 返回 “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 变量的构造器函数。

实例

“Bill”.constructor // 返回 “function String() { [native code] }”
(3.14).constructor // 返回 “function Number() { [native code] }”
false.constructor // 返回 “function Boolean() { [native code] }”
[1,2,3,4].constructor // 返回 “function Array() { [native code] }”
{name:’Bill’, age:62}.constructor // 返回” function Object() { [native code] }”
new Date().constructor // 返回 “function Date() { [native code] }”
function () {}.constructor // 返回 “function Function(){ [native code] }”
亲自试一试
您可以通过检查 constructor 属性来确定某个对象是否为数组(包含单词 “Array”):

实例

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

亲自试一试
或者更简单,您可以检查对象是否是数组函数:

实例

  1. function isArray(myArray) {
  2. return myArray.constructor === Array;
  3. }

亲自试一试
您可以通过检查 constructor 属性来确定某个对象是否为日期(包含单词 “Date”):

实例

  1. function isDate(myDate) {
  2. return myDate.constructor.toString().indexOf("Date") > -1;
  3. }

亲自试一试
或者更简单,您可以检查对象是否是日期函数:

实例

  1. function isDate(myDate) {
  2. return myDate.constructor === Date;
  3. }

亲自试一试

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() 返回字符串,把数字写为指定的长度。

toExponential()
toFixed()
toPrecision()

把布尔转换为字符串

全局方法 String() 能够将布尔转换为字符串。
String(false) // 返回 “false”
String(true) // 返回 “true”
布尔方法 toString() 同理。
false.toString() // 返回 “false”
true.toString() // 返回 “true”

把日期转换为字符串

全局方法 String() 可将日期转换为字符串。
String(Date()) // 返回 “Thu Sep 10 2020 18:33:22 GMT+0800 (中国标准时间)”
日期方法 toString() 同理。

实例

Date().toString() // 返回 “Thu Sep 10 2020 18:33:22 GMT+0800 (中国标准时间)”
日期方法这一章,您能够找到更多可用于把日期转换为字符串的方法:

方法 描述
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() 解析字符串并返回整数。

parseFloat()
parseInt()

一元 + 运算符

一元的 + 运算符可用于把变量转换为数字:

实例

var y = “5”; // y 是字符串
var x = + y; // x 是数字
亲自试一试
如果无法转换变量,则仍会成为数字,但是值为 NaN(Not a number):

实例

var y = “Bill”; // y 是字符串
var x = + y; // x 是数字 (NaN)
亲自试一试

把布尔转换数值

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

  1. Number(false) // 返回 0
  2. Number(true) // 返回 1

把日期转换为数字

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

  1. d = new Date();
  2. Number(d) // 返回 1599734002150
  3. 日期方法 getTime() 同理。
  4. d = new Date();
  5. d.getTime() // 返回 1599734002150

自动类型转换

如果 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() 函数,当您试图“输出”对象或变量时:

  1. document.getElementById("demo").innerHTML = myVar;
  2. // 如果 myVar = {name:"Fjohn"} // toString 转换为 "[object Object]" //对象
  3. // 如果 myVar = [1,2,3,4] // toString 转换为 "1,2,3,4"
  4. // 如果 myVar = new Date() // toString 转换为 "Thu Sep 10 2020 18:33:22 GMT+0800 (中国标准时间)"

数字和布尔也会被转换,但并不明显:
// 如果 myVar = 123 // toString 转换为 “123”
// 如果 myVar = true // toString 转换为 “true”
// 如果 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 试一试

引号中的值指示字符串值。
红色的值指示了(某些)程序员也许不希望的值。

Infinity