javascript判断一个变量是数组还是对象
javascript中如何准确判断一个变量是什么,面试中这是考一个人基本功扎不扎实必定会问的一个问题。如果你还不是很清楚,相信这篇文章会对你有所帮助。
一,判断方法
1.typeof
我们能够使用typeof判断变量的身份,判断字符串得到string,数字和NaN得到number,函数会得到function等,但是判断数组,对象和null时都会得到object,详细请看js数据类型,这就是typeof的局限性,并不能准确的判断该变量的"真实身份"。那如何判断一个变量是数组还是对象?
2.instanceof
使用instanceof可以用来判断一个变量是数组还是对象,原理如下:
数组也是对象的一种,使用instanceof都会返回true
vararr=newArray(); vararr=['aa','bb','cc']; varobj={a:'aa',b:'bb',c:'cc'}; console.log(arrinstanceofArray);//true console.log(arrinstanceofObject);//true console.log(objinstanceofArray);//false console.log(objinstanceofObject);//true
instanceof是如何判断的:
instanceof运算符用来测试一个对象在其原型链中是否存在一个构造函数的prototype属性,意思就是该变量通过原型链上能否找到构造函数的prototype属性,还不清楚原型链的请看原型链,所以就能明白为什么instanceof判断一个变量可以分清楚它到底是数组还是对象:
Array.prototype===arr.__proto__
Object.prototype===arr.__proto__.__proto__
因为arr的原型链上存在Array.prototype和Object.prototype
只有Array类型的变量才会满足arrinstanceofArray和arrinstanceofObject都返回true,
也只有Object类型变量才满足objinstanceofArray返回false,objinstanceofObject返回true
3.constructor
vararr=['aa','bb','cc']; varobj={ 'a':'aa', 'b':'bb', 'c':'cc' }; console.log(arr.constructor===Array);//true console.log(arr.constructor===Object);//false console.log(obj.constructor===Object);//true
4.Object.prototype.toString.call()
Object.prototype.toString.call()方法可以精准判断变量类型,它返回[objectconstructorName]的字符串格式,这里的constructorName就是call参数的函数名
vara=NaN; varb='222'; varc=null; vard=false; vare=undefined; varf=Symbol(); vararr=['aa','bb','cc']; varobj={'a':'aa','b':'bb','c':'cc'}; varres=Object.prototype.toString.call(arr); console.log(res); //[objectArray]varres2=Object.prototype.toString.call(obj);console.log(res2);//[objectObject]varres3=Object.prototype.toString.call(a);console.log(res3);//[objectNumber]varres4=Object.prototype.toString.call(b);console.log(res4);//[objectString]varres4=Object.prototype.toString.call(c);console.log(res4);//[objectNull]varres5=Object.prototype.toString.call(d);console.log(res5);//[objectBoolean]varres6=Object.prototype.toString.call(e);console.log(res6);//[objectUndefined]varres7=Object.prototype.toString.call(f);console.log(res7);//[objectSymbol]//JavaScriptDocument
二,总结
判断简单数据类型可以用typeof,判断数组,对象使用instanceof,constructor和Object.prototype.toString.call(),最好使用Object.prototype.toString.call(),更加精准
以上所述是小编给大家介绍的javascript判断一个变量是数组还是对象详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对毛票票网站的支持!