当前位置: 移动技术网 > IT编程>开发语言>JavaScript > javascript判断一个变量是数组还是对象

javascript判断一个变量是数组还是对象

2019年07月24日  | 移动技术网IT编程  | 我要评论

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判断一个变量是数组还是对象详解整合,希望对大家有所帮助

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网