javascript判断一个变量是数组还是对象
javascript中如何准确判断一个变量是什么,面试中这是考一个人基本功扎不扎实必定会问的一个问题。如果你还不是很清楚,相信这篇文章会对你有所帮助。
一,判断方法
1.typeof
我们能够使用typeof判断变量的身份,判断字符串得到string,数字和nan得到number,函数会得到function等,但是判断数组,对象和null时都会得到object,详细请看js数据类型,这就是typeof的局限性,并不能准确的判断该变量的"真实身份"。那如何判断一个变量是数组还是对象?
2.instanceof
使用instanceof可以用来判断一个变量是数组还是对象,原理如下:
数组也是对象的一种,使用instanceof都会返回true
var arr = new array(); var arr = ['aa','bb','cc']; var obj = { a: 'aa', b: 'bb', c: 'cc' }; console.log(arr instanceof array); //true console.log(arr instanceof object); //true console.log(obj instanceof array); //false console.log(obj instanceof object); //true
instanceof是如何判断的:
instanceof 运算符用来测试一个对象在其原型链中是否存在一个构造函数的 prototype 属性,意思就是该变量通过原型链上能否找到构造函数的prototype 属性,还不清楚原型链的请看原型链,所以就能明白为什么instanceof判断一个变量可以分清楚它到底是数组还是对象:
array.prototype === arr.__proto__
object.prototype === arr.__proto__.__proto__
因为arr的原型链上存在array.prototype和object.prototype
只有array类型的变量才会满足arr instanceof array和arr instanceof object都返回true,
也只有object类型变量才满足obj instanceof array返回false,obj instanceof object返回true
3.constructor
var arr = ['aa','bb','cc']; var obj = { '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()方法可以精准判断变量类型,它返回[object constructorname]的字符串格式,这里的constructorname就是call参数的函数名
var a = nan; var b= '222'; var c = null; var d = false; var e = undefined; var f = symbol(); var arr = ['aa','bb','cc']; var obj = { 'a': 'aa', 'b': 'bb', 'c': 'cc' }; var res = object.prototype.tostring.call(arr); console.log(res); //[object array] var res2 = object.prototype.tostring.call(obj); console.log(res2); //[object object] var res3 = object.prototype.tostring.call(a); console.log(res3); //[object number] var res4 = object.prototype.tostring.call(b); console.log(res4); //[object string] var res4 = object.prototype.tostring.call(c); console.log(res4); //[object null] var res5 = object.prototype.tostring.call(d); console.log(res5); //[object boolean] var res6 = object.prototype.tostring.call(e); console.log(res6); //[object undefined] var res7 = object.prototype.tostring.call(f); console.log(res7); //[object symbol]// javascript document
二,总结
判断简单数据类型可以用typeof,判断数组,对象使用instanceof,constructor和 object.prototype.tostring.call(),最好使用object.prototype.tostring.call(),更加精准
以上所述是小编给大家介绍的javascript判断一个变量是数组还是对象详解整合,希望对大家有所帮助
推荐阅读
-
javascript 判断一个对象为数组的方法
-
[JAVA]使用if…else语句编写代码。定义一个整型变量a,为其赋值为20,判断20是奇数还是偶数,如果为奇数,输出“a是奇数”,否则输出“a是偶数”
-
javascript判断一个变量是数组还是对象
-
判断一个变量是数组还是对象
-
javascript中如何判断在数组中是否含有给定的一个变量值?
-
javascript中如何判断在数组中是否含有给定的一个变量值?
-
JavaScript判断对象是否是一个数组方法汇总
-
怎样判断一个JavaScript变量是array还是obiect答案代码详解
-
JavaScript判断对象是否是一个数组方法汇总
-
Smarty中怎么判断一个变量是字符串还是数组呢