js的基本数据类型:string,boolean,number,null,undefined,symbol(ES6)
引用数据类型:Object
判断基本数据类型:typeof ,需要注意的是null返回Object
且不能判断数组类型 (坑)会判断为object类型。
判断引用类型:instanceof ,判断对象的原型 任何function 和 Object都有一个原型Object
typeof []//为object
判断数据类型函数:
let _typeof = function (data) {
let value = /\[object (\w+)\]/.exec(
Object.prototype.toString.call(data)
);
return value ? value[1].toLowerCase() : '';
}
_typeof('123') //"string"
_typeof(123) //"number"
_typeof(123n) //"bigint"
_typeof(null) //"null"
_typeof(undefined) //"undefined"
_typeof({}) //"object"
_typeof([]) //"array"
_typeof(/123/) //"regexp"
各数据类型比较规律
先看例子
console.log([]==false)// true
console.log(![]==false);//true
// 这个我也没搞懂
console.log(false == "");// true
console.log({}==[])// false
console.log({}=={})// false
console.log([]==[])// false
console.log([]=="")// true
//[].toString() 为 ‘‘
console.log([]==0)// true
各数据类型比较规律:
1.如果是不同类型的数据进行,会默认进行数据类型之间的转换;
如果只有一个操作值是数值,则将另一个操作值转换为数值,进行数值比较
如果一个操作数是对象,则调用valueOf()方法(如果对象没有valueOf()方法则调用toString()方法),得到的结果按照前面的规则执行比较
- 若X是null,Y是undefined,则输出结果为True
- 若x是number,Y是string ,则将字符串转换为数字再进行判断
- 若x是boolean,Y是其他类型,则先将Boolean转换为数字再进行判断
- 若x是Object,Y是Number或者String,则先将对象转化为字符串或数字,再进行判断
除了上述几种类型,其余的输出结果都是False
2.如果是对象数据类型的比较,比较的是空间地址
isNaN(undefined) 为 true
是因为isNaN在判断之前会把参数先转换成number类型
undefined转化为number即NaN。所以为true。
null==undefined//true