基本数据类型(简单数据类型或原始类型):Undefined、Null、Boolean、Number、String 复杂数据类型:Object ES6新增的数据类型:Symbol 对象是最复杂的数据类型,他能够分为三个子类型:object、array、function(不正规说法)javascript
var s = "yicong";
var b = true;
var n = null;
var u;
var o = new Object();
function f(){};
typeof s; // string
typeof b; // boolean
typeof n; // object 特殊
typeof u; // undefined
typeof o; // object
typeof f; // function
typeof Symbol(); // symbol
typeof {}; // object
typeof []; // object
typeof window; // object
typeof NaN; // number复制代码
如上所知:java
若是是引用类型值,那么instanceof操做符就会返回true;git
注意:全部引用类型的值都是Object的实例,若是使用instanceof操做符去检测基本类型的值,则它会返回false;github
为何全部引用类型的值都是Object的实例?
由于当你在控制台写下 [] 的时候,它已经给你隐式帮你new Array()了,Array()是一个构造函数,因此[]就是对象的实例。函数
解答:由于基本类型不是对象ui
function instance_of(ordinary,construct){
let conProto = construct.prototype;
ordinary = ordinary.__proto__;
while(true){//一直循环下去,也就是在ordinary的原型链上寻找,直到ordinary的原型链上有construct.prototype为止
if(ordinary === null){
return false;
}
if (ordinary === conProto){
return true;
}
ordinary = ordinary.__proto__;
}
}复制代码
也就是说:spa
ordinary对象是否是construct构造函数构造(new)出来的,prototype
ordinary对象的原型链上有没有construct的原型code
更多文章请转移:github.com/wangyicong
对象