数据类型
JS中存在5种简单数据类型:Undefined、Null、Boolean、Number和String。还有一种复杂数据类型——Object。
所有的值最终都将是上述6种数据类型之一。
typeof 操作符
返回一个代表变量的数据类型的字符串
- 'undefined'——如果这个值未定义
- 'boolean'——如果这个值是布尔值
- 'string'——如果这个值是字符串
- 'number'——如果这个值是数值
- 'object'——如果这个值是对象或null
- 'function'——如果这个值是函数
Undefined 数据类型
该类型只有一个值即 undefined。当一个变量被定义但是未赋值,则其值为 undefined
当使用typeof的时候,未定义变量和未声明变量都为 undefined
let a;
typeof a // undefined
typeof b // undefined
Null 数据类型
该类型只有一个值即 null,其含义为空对象指针,所以 typeof null是 object
Boolean 数据类型
当其他类型转换为Boolean类型时,具有以下对应关系:
| 数据类型 | 转换为true的值 | 转换为false的值 |
|---|---|---|
| Boolean | true | false |
| String | 任何非空字符串 | 空字符串(即"") |
| Number | 任何非零数字值 | 0和NaN |
| Object | 非null的对象 | null |
| Undefined | 因为只有一个值永远时false | undefined |
Number 数据类型
整数
存在8进制,以0开头,如果0后的字面量超出8进制则作为10进制,严格模式下不存在8进制 存在16进制,以0x开头
浮点数
保存浮点数的空间时保存整数值的两倍。所以1.0会被转换为1
做浮点数的一些测试的时候须小心,例如0.1 + 0.2 === 0.3 // false
数值范围
最大最小值分别保存在:Math.MAX_VALUE Math.MIN_VALUE中
NaN
即非数值(Not a Number)其有两个特点:
- 任何设计NaN的操作都返回NaN
- NaN与任何值都不相等,包括自身
isNaN()
该方法接受一个任意数据类型的参数,返回布尔值代表该参数是否是 非数值
当参数是简单数据类型的时候,方法会将参数数值化,如果成功则返回false,否则返回true
当参数是对象时,会首先调用对象的valueOf()方法,然后确定该方法的返回值是否可以转换为数值,如果不能,则基于这个返回值的toString()方法再判断
数值转换
可以将非数值转换数值,有以下三个方法:
Number()
parseInt()
parseFloat()
Number()
- true转1,false转0
- 数字原样返回(包括进制,8,16)
- null转0
- undefined转NaN
- 如果是空字符串转0,如果是数字的字符串('123'可以但是'x123'不可以)则转数字,否则转NaN,16进制字符串转16进制转换十进制后的数字,八进制忽略前导零
- 如果是对象则先调用valueOf()方法,如果返回基本数据类型则走以上原则返回,如果返回一个对象则调用toString()方法走以上原则,且不递归处理两个方法返回的值
parseInt
其工作机制是先去除字符串前面的空格,找到第一个非空格字符,如果该字符为不是数字字符或者正负号,则返回NaN,如果解析到数字或正负号则接着匹配,且测试中依旧不能识别八进制,但是可以识别16进制,所以需要第二个参数来确定返回的数字的进制
parseFloat
与parseInt功能相似,但是值得注意的是会忽略前导零后16进制永远都解析成0,所以parseFloat只能解析十进制数值
String 数据类型
字符串是不可变的,一旦创建,想要修改只能将原来的销毁
除了null和undefined,其他数据类型都具有toString方法,而且在Number类型调用toString方法时,可以加入一个进制参数来获取对应的进制的字符串。
Object 数据类型
Object的原型链上有几个基本的属性和方法:
constructor // 该属性保存了创建当前对象的函数
hasOwnProperty(propertyName) // 用于检查给定的属性在当前对象的实例中而不是在原型链上,参数为字符串
isPrototypeOf(object) // 用于检测传入的对象是否是当前对象的原型
prototypeIsEnumerable(prototypeName) // 用于检测给定的属性是否能够用 for-in 来枚举
toLocaleString() // 返回对象的字符串表示,和执行上下文环境的地区对应
toString() // 返回对象的字符串表示
valueOf() // 返回对象的字符串、数值或布尔值表示。通常与toString()方法的返回值相同
持续更新在github