珠峰培训

前端中数据类型之间的比较规则及不同数据类型之间的区别

作者:

2016-08-14 23:08:18

217

详解 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().