欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-04-12 10:47:29
javascript中如何准确判断一个变量是什么,面试中这是考一个人基本功扎不扎实必定会问的一个问题。如果你还不是很清楚,相信这篇文章会对你有所帮助。 一,判断方法 1...

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