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判断一个变量是数组还是对象详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对毛票票网站的支持!