<script>
//判断一个对象是不是数组类型 typeof不能查看所有类型
var obj1={x:1,y:2},
obj2=[1,2,3],
obj3=new Date();
//1.判断爹(原型对象)
console.log(
obj1.__proto__==Array.prototype,//false
obj2.__proto__==Array.prototype,//true
obj3.__proto__==Array.prototype,//false
//条件,//false
//条件,//true
//条件,//false
);
//
console.log(
Array.prototype.isPrototypeOf(obj1),//Array的老公是obj1的爹吗
Array.prototype.isPrototypeOf(obj2),
Array.prototype.isPrototypeOf(obj3),
);
//2.判断妈妈(构造函数)
//每个原型对象有一个constructor属性,指向构造函数
console.log(
obj1.constructor==Array,
obj2.constructor==Array,
obj3.constructor==Array,
);
console.log(
obj1 instanceof Array,//instanceof-->实例 obj1 是Array的实例吗?
obj2 instanceof Array,
obj3 instanceof Array,
);
obj4={x:1,y:2};
//严谨
//3.验DNA(每个对象中都隐藏着一个class属性,记录着对象创建时的类型名,不随着继承关系的改变而改变)
//对象的祖宗是object,他的方法中存在toString方法返回的是一个类型[object 内置类型],但是最直接用toString的时候,js会认为在查看内容,在其原型对象中创建一个toString方法,所以不会输出类型,只有用call这个不讲理的方法会让对象找到想要用的函数。
console.log(
Object.prototype.toString.call(obj1)=="[object Array]",
Object.prototype.toString.call(obj2)=="[object Array]",
Object.prototype.toString.call(obj3)=="[object Array]",
//Object.prototype.toString.call(obj4)=="[object Array]",
/*obj1.toString(),
obj2.toString(),
obj3.toString(),*/
);
//4.Array.isArray()严谨
console.log(
Array.isArray(obj1),
Array.isArray(obj2),
Array.isArray(obj3),
);
</script>
面试题:判断一个对象是不是数组类型
最新推荐文章于 2022-05-10 11:38:16 发布