2 数据类型
2.1 数据类型的划分
① 原始类型
number 数值类型
string 字符串类型
boolean 布尔类型
undefined 未定义类型
null 空类型
② 对象类型
Array 数组类型
Object 对象类型
Function 函数类型
....
2.2 判断数据的类型
typeof()
注意(特殊现象):
使用 typeof 判断 null 的数据类型,返回的是 object。
2.3 number 数值类型
① 整型
整型就是整数的数字。 数字直接量有十进制表示法,八进制表示法以及十六进制表示法。
892; // 10 进制表示法
065; // 8 进制表示 以0开头
0x8a; // 16 进制表示 以0x开头
② 浮点型
浮点型就是带小数点的数字。
123.34; // 浮点数
3.4e10; // 科学计数法表示的数字
注意: 浮点型数字的计算存在精度问题。
③ NaN
NaN 表示 Not A Number,是 number 类型的一个值。
可以使用函数 isNaN()
判断一个数据是否是 NaN, 如果是 NaN 返回 true,否则返回 false。
④ JavaScript 中数字的有效范围
JS 中可表示的数字有效范围是: -5e324 ~ 1.7976931348623157e+308
。
如果数字超出有效范围,使用 Infinity(正无穷) 和 -Infinity(负无穷) 表示。
可以使用函数 isFinite()
判断一个数字是否在有效范围内,在有效范围内返回 true,不在有效范围内返回 false。 不在有效范围内的数值有: Infinity、-Infinity、NaN。
2.4 string 字符串类型
① 字符串的表示方式
可以使用单引号或者双引号定义字符串,二者没有任何区别。
'字符串内容';
"字符串内容";
单引号定义的字符串内容中不能有单引号,双引号定义的字符串内容中不能有双引号。
② 转义字符
转义字符用于表示一些无法直接输入的字符。
\n 表示换行符
\' 表示单引号
\" 表示双引号
\\ 表示反斜杠本身
\uXXXX unicode编码
2.5 boolean 布尔类型
boolean 类型用于表示一种状态,要么是要么否。
boolean 类型只有两种值, true 表示是,false 表示否。
2.6 null 和 undefined
undefined 主要是被动产生,如声明了变量没有赋值、使用不存的属性等。
null 可以主动定义,比如声明了变量暂时不知道赋哪个值,可以先赋值为 null。
3 数据类型转换
3.1 数据类型转换的规则
① 其他类型转为 number 类型
string -> number:
① 纯数字字符串可以转为一个有效number数字, 注意科学计算法和十六进制的表示也是纯数字。
② 空字符串转为 0。
③ 其他形式的字符串转为 NaN。
④ string转为number的时候,取去掉两端的空格。
boolan -> number:
true 转为 1。
false 转为 0。
null -> number:
转为 0
undefined -> number:
转为 NaN
② 其他类型转为 string 类型
数据长什么转为字符串就什么样
③ 其他类型转为 boolean 类型
number -> boolean:
① NaN 和 0 转为 false
② 其他数字转为 true
string -> boolean:
① 空字符串转为 false
② 其他字符串转为 true (string转为boolean两端空格不会去掉)
null -> boolean:
转为 false
undefined -> boolean:
转为 false
总结: 0、NaN、空字符串、null、undefined 转为 boolean 会转为 false,其他的数据都转为 true。
3.2 强制类型转换(显示转换)
① 强制把其他类型转为 number 类型的函数
Number()
parseInt()
parseFloat()
parentInt()、parseFloat() 与 Number() 的区别:
- 使用 parseInt() 和 parseFloat() 纯数字字符串可以转为有效数字(包括十六进制表示的,不包括科学计数法表示)。
- 使用 parseInt() 和 parseFloat() ,以数字开头也可以转为有效数字。
- 其他字符串都转为 NaN。
- parseInt() 和 parseFloat() 可以用于提取字符串中的数字,所以如果要转换的数据类型不是字符串,统统转为 NaN
parseInt() 与 parseFloat() 的区别:
- parseInt() 提取的是字符串中的整数部分(舍去小数部分)。
- parseFloat() 连同小数部分也可以提取。
注意:
Number() 的转换规则才是标准的转换规则! 自动类型转换的规则与 Number() 是一致的。
② 强制把其他类型转为 string 类型的函数
String()
③ 强制把其他类型转为 boolean 类型的函数
Boolean()
3.3 自动类型转换(隐式转换)
1. JS 作为弱类型的语言,数据类型可以自动转换。
2. 数据参与运算的时候,不符合该运算对数据类型的要求,数据会自动进行类型转换。
3. 运算对数据类型的要求是由运算符决定
4. 自动类型转换的规则与强制类型转换是一致的
3.4 关于 NaN 的总结
NaN 具有如下两个特点:
- NaN 与任何数据进行任何运算,结果仍然是 NaN。
- NaN 与任何数据都不相等,包括自己。
关于 isNaN() 的特点:
- isNaN() 用于判断一个数据是否是 NaN,是 NaN 返回 true,否则 false
- isNaN 也可以判断number类型以外的数据,如果该数据能够转为NaN,返回结果也是 true。