一、数据类型
基本数据类型:
- Undefine 变量初始值
- Null 空值 节点未获取到时为null
- Number 数字
- Boolean 布尔型 值为 true (真), false (假)
- String 字符串 只要用引号引起来的都为字符串
引用数据类型:
Object 对象 、Array 数组 、Function 函数
二、检测数据类型
1、typeof()
function fn(){} var t = typeof(fn); console.log(t)
typeof()检测变量的数据类型:
1.undefined (undefined)
2.object (对象) (null)
3.number (number)
4.boolean(布尔) (true,false)
5.string(字符串) (string)
6.function(函数) (函数)
2、instanceof 可通过__proto__找到,缺点不能判断原始数据类型
var ary = [];
console.log(ary instanceof Array); // true
console.log(ary instanceof Object); // true
function fn() {}
console.log(fn instanceof Function); // true
console.log(fn instanceof Object); // true
3、constructor
检测和instanceof 差不多是一样,但他检测不了Object
4、Obeject.prototype.toString.call() 最推荐使用的
console.log(({}).toString.call(‘中国’)); // --> “[object String]”
console.log(({}).toString.call(true)); // --> [object Boolean]
console.log(({}).toString.call(undefined)); // -->[object Undefined]
console.log(({}).toString.call(null)); // -->[object Null]
console.log(({}).toString.call(function () {})); // -->[object Function]
三、数据类型转换
1、parseInt()
取整数部分
2、parseFloat()
取小数
console.log(parsetInt(99.9)); //99
console.log(parseFloat(99.009)); //99.009
parsetFloat(99.00); //99
parseInt('3a'); //3
parseFloat('9.9.8'); //9.9
parseFloat('abcd'); //NaN
parseInt('09/06/2019');//9
parseFloat('09/06/2019');//9
小结:
1.parseInt()
和parseFloat()
一般()里放数字,直接化正或化浮点;
2.()里为字符串时,若为数字开头,后边哪里出现字母就截断,若为字母开头,或者为空字符串均为NaN
, 对于日期,/ 后面的数字就截断;
3.()里为字符串时,对于浮点数里有几个点,默认第一个点为小数点,之后的均为字符串,对于日期,/ 后面的数字就截断
3.Number()
强制转换为数字
小结:
- undefined , 有字母的字符串或者加上数字 , 转换为NaN
- null 、false, 空字符串, 转换为0
- true 转换为 1
- 数字类型 , 纯数字的字符串 , 转换为数字本身
4.Boolean()
强制转换为布尔型 true/false
注意点:
- 任何对象转布尔,均为true
- 返回值为false:在js中,只有0、-0、NaN、""、false、null、undefined
- 在取反时,这些均为true
5.String()
转换为字符串
特殊:
**NaN(包括自己)、null(除了自己)、undefined(除了自己)跟任何东西都不相等 **
== 和 === 之间的区别
== 两边值类型不同的时,先进行类型转换,再比较值
=== 不会做类型转换,类型不同的一定不相等
== 所做的类型转换过程:
- 如果不同类型进行比较时,先进行类型转换
- 如果比较的是 null 或 undefined,如果是,返回 true
- 先判断两者类型是否为 number 和 string , 如果是, 就将字符串转换为 number
- 先判断两者中是否有 boolean, 如果是,,就将 boolean 转换为 number 之后再进行判断
- 先判断两者中一方是否有 object ,如果另一方有 string、number,如果是,将 object转为原始类型再进行判断
经典面试题:[] == ![] 结果为什么为true
分析:
- 首先 ! 运算符优先级最高,![] 会被转换为false,[] == false
- [] == false ,false为bollean,因此就将false转为数字类型就为0,[] == 0
- 将数组转为原始类型,调用数组的
toString()
方法,将 [] 转为空字符串,’’ == 0- 因为0为数字类型,就要将空字符串转为 0,再做比较,所以0 == 0
- 两边均为数字类型相等,所以0==0 为true