永发信息网

js判断对象属于哪个类

答案:1  悬赏:60  手机版
解决时间 2021-03-27 20:08
js判断对象属于哪个类
最佳答案
如何判断js中的数据类型:typeof、instanceof、 constructor、 prototype方法比较

如何判断js中的类型呢,先举几个例子:

var a = "iamstring.";

var b = 222;

var c= [1,2,3];

var d = new Date();

var e =
function(){alert(111);};

var f =
function(){this.name="22";};

最常见的判断方法:typeof

alert(typeof a)
------------> string

alert(typeof b)
------------> number

alert(typeof c)
------------> object

alert(typeof d)
------------> object

alert(typeof e)
------------> function

alert(typeof f)
------------> function

其中typeof返回的类型都是字符串形式,需注意,例如:

alert(typeof a == "string")
-------------> true

alert(typeof a == String)
---------------> false

另外typeof
可以判断function的类型;在判断除Object类型的对象时比较方便。

判断已知对象类型的方法: instanceof

alert(c instanceof Array)
---------------> true

alert(d instanceof
Date)

alert(f instanceof Function)
------------> true

alert(f instanceof function)
------------> false

注意:instanceof
后面一定要是对象类型,并且大小写不能错,该方法适合一些条件选择或分支。

根据对象的constructor判断:
constructor

alert(c.constructor ===
Array) ----------> true

alert(d.constructor === Date)
-----------> true

alert(e.constructor ===
Function) -------> true

注意: constructor 在类继承时会出错

eg,

function A(){};

function B(){};

A.prototype = new B(); //A继承自B

var aObj = new A();

alert(aobj.constructor === B) ----------->
true;

alert(aobj.constructor === A) ----------->
false;

而instanceof方法不会出现该问题,对象直接继承和间接继承的都会报true:

alert(aobj instanceof B) ---------------->
true;

alert(aobj instanceof B) ---------------->
true;

言归正传,解决construtor的问题通常是让对象的constructor手动指向自己:

aobj.constructor = A;
//将自己的类赋值给对象的constructor属性

alert(aobj.constructor === A) ----------->
true;

alert(aobj.constructor === B) ----------->
false; //基类不会报true了;

通用但很繁琐的方法: prototype

alert(Object.prototype.toString.call(a) === ‘[object String]’)
-------> true;

alert(Object.prototype.toString.call(b) === ‘[object Number]’)
-------> true;

alert(Object.prototype.toString.call(c) === ‘[object Array]’)
-------> true;

alert(Object.prototype.toString.call(d) === ‘[object Date]’)
-------> true;

alert(Object.prototype.toString.call(e) === ‘[object Function]’)
-------> true;

alert(Object.prototype.toString.call(f) === ‘[object Function]’)
-------> true;

大小写不能写错,比较麻烦,但胜在通用。

通常情况下用typeof
判断就可以了,遇到预知Object类型的情况可以选用instanceof或constructor方法,简单总结下,挖个坑,欢迎补充!
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
我母亲80岁,近来双脚小腿下面内踝子骨、外踝
映客实名认证是什么你们知道吗
人类可以借助地球磁场进行感应生电么?
家装钢结构阁楼铺木工板能做地暖吗
曾经的网恋,现在本人已婚,她也知道,干嘛老
不小心喝了漱口水会怎样?
脑袋特别灵光的人被称为什么鬼
房产证写两个人需要过税吗?
我被x射线探伤机照了8秒,问题大吗
中国联通(健吉通讯合作厅)地址在什么地方,想
单选题自2009年11月10日起,河北省以石家庄为
有人食用这种盐吗
从龙马大道一段到酒城大道一段怎么坐公交车,
用洒脱不羁造句
《遮天》中已出现的九秘有哪几种
推荐资讯
醋加碱能治虫子叮咬吗
有男富二代装穷喜欢穷家女的电视剧吗越多越好
显卡跑分多少能玩主流游戏
为什么很多年轻人明明生活优越,却时时事事对
杜甫草堂的诗句自篇
站在监理的角度,基坑护坡喷浆可以自拌吗?
宝宝洗澡游泳耳朵进水有在鼻子流出来水的吗
文言文 狼施威 道理
wow7.0dz刺杀天赋用什么武器
自己的女朋友总跟别的男生出去玩?正常吗!只
萨尔特萨克斯真是台湾产的吗?
志在山顶的人,不会贪恋山腰的风景。。。
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?