简单数据类型(基本数据类型): String Number Boolean Null Undefined
复杂数据类型: Object
typeof 检测变量的数据类型
特殊值null被认为是一个空的对象引用,因此typeof null == object
Undefined类型
undefined类型只有一个值就是undefined,变量声明但未初始化时就是undefined。
对于已声明但未赋值的变量以及未声明的变量,typeof 都为undefined。
Null类型
Null类型只有一个值null,从逻辑角度来看null值表示一个空对象指针,因此typeof null返回object。
如果定义的变量准备在将来用于存储对象,那么最好将变量初始化为null。
undefined派生自null,因此null == undefined 返回值为true。
Boolean类型
Boolean类型只有两个字面值 true和false,其他类型转boolean需要调用Boolean()函数。
String中任何非空字符串转换为true,空字符串转换为false;
Number中任何非0数字转换为true(包括无穷大),0和NaN转换为false;
Object中除了null之外的对象(即使为空对象)转换为true;
Undefined转换为false。
Number类型
浮点数值:该数值必须包含一个小数点,且小数点后至少有一位数字。
保存浮点数所需要的内存空间时保存整数的两倍。浮点数最高精度时17位小数,但在计算时其精确度远远不如整数。(浮点数如何计算?)
数值范围:
最小数值:Number.MIN_VALUE
最大数值:Number.MAX_VALUE
计算超出js数值范围,将会被转换为特殊的Infinity值,分为正无穷Infinity(Number.POSITIVE_INFINITY)和负无穷-Infinity(Number.NEGATIVE_INFINITY)。
isFinite()函数判断值是否位于最小值和最大值之间。
NaN
NaN即非数值(not a number),是一个特殊的数值,表示本应要返回数值但实际未返回数值的情况。任何涉及NaN计算的操作都会返回NaN;NaN与任何值都不相等,包括NaN本身。
isNaN()函数判断是否为NaN,在判断前函数内部将会对数据类型进行转换,比如string类型的‘10’会被转化为number类型的10.
数值转换
Number():可以用于任何数据类型
parseInt()和parseFloat()专门用于把字符串转换成数值
Number()转换规则:
1、如果是Boolean值,true和false分别被转换为1和0;
2、如果是数字值,则直接输出;
3、null 返回0;
4、undefined返回NaN;
5、如果是字符串,遵循以下原则:
字符串中只包含数字(包括前面带正号和负号),则转换为十进制数值;如果字符串包含有效的浮点格式,则将其转换为对应的浮点数值(忽略前导0);如果字符串包含有效的十六进制格式例如x0f,则将其转换为相同大小的十进制数值;空字符串转换为0;其他字符串转换为NaN。
6、如果是对象,则调用对象的valueOf()方法,然后依照前面的规则转换返回的值。如果转换的结果是NaN,则调用对象的toString()方法,然后再次依照前面的规则转换返回的值。
parseInt() 在转换字符时更多的是看其是否符合数值模式,会忽略字符串前面的空格,直接找到第一个非空格字符,如果第一个字符不是数字字符或者负号直接返回NaN。parseInt()转换空字符串为NaN。如果第一个字符是数字字符,parseInt()会继续解析第二个字符,直至遇到非数字字符。
parseInt()能够解析十六进制字符,其有第二个参数可以指定转换的格式是十进制还是十六进制等。
parseFloat(),始终忽略前导的0,只能解析十进制字符。字符串中的第一个小数点是有效的,第二个小数点及其之后的小数点都是无效的。
String类型
转换为字符串: toString(),null和undefined无此方法。
数值转换时可传递参数2、8、10、16等表示转换的进制,默认为十进制。
在不知道要转换的值是否为null或者undefined,可使用String()方法,这个函数能够将任何类型转换为字符串。
String()转换原则:
1、如果值有toString()方法,则调用改方法(没有参数)并返回相应的结果;
2、如果是null,输出"null";
3、如果是undefined,输出"undefined"。
Object类型
ECMAScript中对象其实是一组数据和功能的集合。对象可通过执行new操作符后跟要创建的对象类型的名称来创建。
Object的每个实例都具有下列属性和方法:
1、constructor:保存着用于创建当前对象的函数,比如new Object()创建出来的对象,其构造函数就是Object();
2、hasOwnProperty(propertyName):用于检查给定的属性在当前对象实例中是否存在;
3、isPropertypeOf(object):用于检查传入的对象是否是当前对象的原型;
4、propertyIsEnumerable(propertyName):用于检查给定的属性是否能够使用for-in语法来枚举;
5、toLocalString():返回对象的字符串表示,该字符串与执行环境的地区对应;
6、toString():返回对象的字符串表示;
7、valueOf():返回对象的字符串、数值或者布尔值表示。通常与toString()方法返回值相同。