复习类型转换前要先复习怎么判断数据是什么类型呢?
1.JS数据类型
JavaScript 中有五种可包含值的数据类型:
●字符串(string)
●数字(number)
●布尔(boolean)
●对象(object)
●函数(function)
有三种对象类型:
●对象(Object)
●日期(Date)
●数组(Array)
同时有两种不能包含值的数据类型:
●null
●undefined
2.typeof 运算符
用来确定 JavaScript 变量的数据类型。
typeof
运算符不是变量。它属于运算符。运算符(比如 + - * /
)没有数据类型。
但是,typeof
始终会返回字符串(包含运算数的类型)。
通过typeof +数据
得出以下结果:
数据 | 类型 |
---|---|
字符串 | string |
数字 | number |
NaN | number |
true/false | boolean |
对象 | object |
数组 | object |
日期 | object |
null | object |
函数 | function |
undefined | undefined |
未定义变量 | undefined |
尚未赋值的变量 | undefined |
所以,无法使用 typeof
去判断 JavaScript 对象是否是数组(或日期)。
3.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”):
function isArray(myArray) {
return myArray.constructor.toString().indexOf("Array") > -1;
}
或者,可以检查对象是否是数组函数:
function isArray(myArray) {
return myArray.constructor === Array;
}
同样地,对于日期:
function isDate(myDate) {
return myDate.constructor.toString().indexOf("Date") > -1;
}
或者,可以检查对象是否是日期函数:
function isDate(myDate) {
return myDate.constructor === Date;
}
复习完了怎么判断JS数据类型,那么可以复习转换了。
4.JavaScript 类型转换
JavaScript 变量能够被转换为新变量以及另一种数据类型:
●通过使用 JavaScript 函数
●通过 JavaScript 本身自动转换
(1)把数值转换为字符串 num->string
方法 | 描述 |
---|---|
(全局) String() | 把任意类型的数字、文字、变量或表达式转换为字符串 |
toString() | 把任意类型的数字、文字、变量或表达式转换为字符串 |
toExponential() | 返回字符串值,它包含已被四舍五入并使用指数计数法的数字。 |
toFixed() | 返回字符串值,它包含了指定位数小数的数字 |
toPrecision() | 返回字符串值,它包含了指定长度的数字 |
●把字符串转换为数值 string->num
方法 | 描述 |
---|---|
(全局)Number() | 返回数字,由其参数转换而来。 |
parseFloat() | 解析其参数并返回浮点数。 |
parseInt() | 解析其参数并返回整数。 |
如果无法转换为数值,则返回 NaN (Not a Number)。
一元 + 运算符
一元的 +
运算符可用于把变量转换为数字
var y = "5"; // y 是字符串
var x = + y; // x 是数字
如果无法转换变量,则仍会成为数字,但是值为 NaN(Not a number):
var y = "Bill"; // y 是字符串
var x = + y; // x 是数字 (NaN)
(2)把布尔转换为字符串 bool->string
全局方法 String()
能够将布尔转换为字符串。
布尔方法 toString()
同理。
●把字符串转换为布尔 string->bool
全局方法Boolean()
能够将字符串转换为布尔。
(3)把日期转换为字符串 date->string
方法 | 描述 |
---|---|
(全局) String() | 把任意类型的数字、文字、变量或表达式转换为字符串 |
toString() | 把任意类型的数字、文字、变量或表达式转换为字符串 |
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 日以来的毫秒) |
●把字符串转换成日期 string->date
全局方法 Date()
能够将字符串转换为日期。
具体看JS复习(中)日期的格式化
(4)把布尔转换数值 bool->num
全局方法 Number()
可把布尔转换为数字。
Number(false) // 返回 0
Number(true) // 返回 1
●把数值转换布尔 num->bool
全局方法 Boolean()
可把数值转换为布尔。
只有Boolean(0)
和Boolean(NaN)
返回false
,其他数字都是true
。
(5)把日期转换为数字 date->num
全局方法 Number()
可用于把日期转换为数字,返回毫秒数。
日期方法 getTime()
同理,返回自 1970 年 1 月 1 日以来的毫秒数。
●把数字转换为日期 num->date
全局方法Date()
可用于把“整数”数值(毫秒数)转换为日期。
(6)自动类型转换
如果 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
(7)自动字符串转换
JavaScript 自动调用变量的 toString()
函数,当我们试图“输出”对象或变量时:
document.getElementById("demo").innerHTML = myVar;
// 如果 myVar = {name:"Fjohn"}
toString 转换为 "[object Object]"
// 如果 myVar = [1,2,3,4]
toString 转换为 "1,2,3,4"
// 如果 myVar = new Date()
toString 转换为 "Sun Sep 22 2019 15:28:19 GMT+0800 (中国标准时间)"
数字和布尔也会被转换,但并不明显:
// 如果 myVar = 123
toString 转换为 "123"
// 如果 myVar = true
toString 转换为 "true"
// 如果 myVar = false
toString 转换为 "false
(8)JavaScript 类型转换表
下表中列出了将不同 JavaScript 值转换为数字、字符串和布尔的结果: