console.log(typeof null);
输出什么?Obejct。
这个问题很多人都知道,但是,为什么输出的是Object?
原因就在于js在存储数据的时候,会用低位数(前三位)去存储数据类型。
其中:
000:对象
010:浮点数
100:字符串
110:布尔
1:整数
但是对于null,undefine来说,
null所有的机器码均为000与对象的前三位一致,所以就会出现误判的情况。
instanceo判断数据类型得原理就是通过原型链的查询。(附代码)
function myinstanceof(left,right){
//左边是实例对象,右边是构造函数。
let leftproto = left.__proto__;
let rightprototype = right.prototype;
while(true){
if( leftproto == rightprototype) return true;
if(leftproto==null) return false;
leftproto = leftproto .__proto__
}
}
但是instance也存在一个小问题,如果简单数据类型是直接赋值而来,进行检测也会误判。
let a =1;
console.log(a instanceof Number);
输出的是fasle。
所以我们经常用其去判断是否为数组。
但是我还是更推荐用Array.isArray()去判断。
除此之外,还可以通过
const tostring = Object.prototype.toString;
console.log(
tostring.call(1),
// tostring.call([1,2,3]),
// tostring.call(function(){}),
// tostring.call({name:"lisi",age:13})
);