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