数据类型
JS中的数据类型可以分为两类:
- 原始类型
1. 数字
2. 字符串
3. 布尔值
4. null
5. undefined - 对象类型
1. 无序集合
2. 数组
3. 函数
类型转换
类型的转换可以分为
-
原始值到原始值的转换
-
原始值到对象的转换
1.调用String()构造函数
2.调用Number()构造函数
3.调用Boolean()构造函数
(null和undefined无法完成到对象的正常转换) -
对象到原始值的转换
1.对象到布尔值的转换:所有的对象都有转换为true
2.对象到字符串的转换与对象到数字的转换需调用相应的方法来完成:当对象进行到字符串的转换时 1.优先调用toString()方法,如果返回一个原始值,则将这个值转换为字符串,并将其返回 2.如果没有toString()方法,或者不返回一个原始值,如果存在valueOf()方法方法则调用 valueOf()方法,当返回值是原始值时,将其转换为字符串 3.无法从两个方法中获得一个原始值,将抛出一个类型错误异常 当对象进行到数字的转换时 1.优先调用valueOf(),后者返回一个原始值,则将这个原始值转换为数字,并将其返回 2.调用toString(),后者返回一个原始值,则将这个原始值转换为数字,并将其返回 3.负责抛出一个类型错误异常
原数值 | 字符串 | 数字 | 布尔值 | 对象 |
---|---|---|---|---|
undefined | “undefined” | NaN | false | throws TypeError |
null | “null” | 0 | false | throws TypeError |
true | “true” | 1 | new Boolean(true) | |
false | “false” | 1 | new Boolean(false) | |
true | “true” | 1 | new Boolean(true) | |
" " | 0 | false | new String(" ") | |
“2” | 1 | true | new String(“2”) | |
“one” | NaN | true | new String(“one”) | |
0 | “0” | false | new Number(0) | |
-0 | “0” | false | new Number(-0) | |
NaN | “NaN” | false | new Number(NaN) | |
Infinity | “Infinity” | true | new Number(Infinity) | |
-Infinity | “-Infinity” | true | new Number(-Infinity) | |
[] 任意数组 | " " | 0 | true | |
[ 9 ] | “9” | 9 | true | |
[ ‘a’ ] | join()方法 | NaN | true |
该表节选于《JavaScirpt权威指南(第六版)》
类型转换中又有显示转换与隐式转换
-
显示转换
转换为字符串:tostring方法、String函数
转换为数字:parseInt和parseFloat方法、Number函数
转换为布尔式:Boolean函数
转换为对象:Object函数 -
隐式转换
- 加法运算符"+“如果加号两边存在一个是String类型,表达式的值便是一个String。
其余四则运算运算符”-"、"*"、""只要两边有一个为number类型,表达式的值便是number。当遇到无法转换为数字的情况其会返回NaN。 - 判断语句
判断语句中的判断条件需要是Boolean类型,所以条件表达式会被隐式转换为Boolean。 其转换规则同Boolean的构造函数。 - Native代码调用
JavaScript宿主环境都会提供大量的对象,它们往往不少通过JavaScript来实现的。 JavaScript给这些函数传入的参数也会进行隐式转换。 - !
一元“!”运算符会将其操作数字转换为布尔值并取反。 - ==
“==”用于比较两个值是否相等,如果两个操作数不是同一类型,那么相等运算符会尝试进行类型转换
如果一个值是null,另一个是undefined,则他们相等。
如果一个值是数字,另一个是字符串,先将字符串转换为数字,再进行比较。
如果一个值为true,则将其转换为1再比较。如果为false,则转换为0。
如果一个值为对象,另一个为数字或字符串,则调用toString()方法或valueOf()将对象转换为原始值再进行比较。