详解 js中不同数据类型之间的比较规则
1、对象==对象 永远不相等
var obj1 = {name:'zhangsan',age:8};
var obj2 = {name:'zhangsan',age:8};
var obj3 = obj2;
console.log(obj1 == obj2);
console.log(obj2 == obj3);
2、 对象==字符串 先将对象转换为字符串(toString()),然后再进行比较,例如
[].toString()转为”“空字符串;({}.toString();) ==> [object Object]
console.log({} == "");
3、对象==布尔类型 对象先转换为字符串(toString()),字符串再转换为数字(Number());布尔类型转换为数字(true:1,false:0);最后两数字比较
console.log([]==false);
4、对象==数字 对象先转换为字符串(toString()),字符串再转换为数字(Number())
var obj = [age:7];
var arr = [7];
console.log(obj == 7);
console.log(arr == 7);
5、 数字==布尔 布尔类型转换为数字(true:1,false:0)
console.log(1 == true);
console.log(2 == true);
console.log(2 == false);
6、数字==字符串 字符串再转换为数字(Number())
console.log(7 == "7px");
7、 字符串==布尔 都转换为数字,然后比较
console.log(true == "1");
8、 null或undefined和其他任何数据类型相比都不相等,但是
console.log(null == undefined); //true
console.log(Number(null)); //0
console.log(Number(undefined)); //NaN
9、 === 绝对比较 如果数据类型不一样,肯定不相等
console.log("1" === 1);
console.log(0 === false);
console.log(null === undefined);
10、 !:取反(先将值转化为布尔类型,然后再取反; !!:将其他数据类型转换为boolean类型,相当于Boolean();
![] == false // true !先和[]运算,不等[]转为字符串
数据类型区分和数据类型检测
1、 基本数据类型和引用数据类型的区别:
基本数据类型把值直接赋给变量,直接对值进行操作;
引用数据类型则是开辟一段内存,将属性名和属性值保存在里面,并拥有一个内存地址;
而变量引用的是内存地址,并没有存储数值
基本数据类型操作的是值;引用数据类型操作的是引用内存地址
2、检测数据类型方式
typeof运算符,返回值:
字符串
,包含”number”,”string”,”boolean”,”undefined”,”function”,”object”;
typeof不能具体检查object下细分的数据类型,如:数组,对象,正则…
console.log(typeof typeof typeof typeof []);
3、 其他检测数据类型的方式:
1).instanceof运算符;
2).constructor;
3).Object.prototype.toString.call().