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

 更新时间:2019年04月10日 14:51:30   作者:markkr133  
这篇文章主要介绍了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判断一个变量是数组还是对象详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

相关文章

  • 利用js canvas实现五子棋游戏

    利用js canvas实现五子棋游戏

    这篇文章主要为大家详细介绍了利用js canvas实现五子棋游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-10-10
  • js实现点击图片自动提交action的简单方法

    js实现点击图片自动提交action的简单方法

    下面小编就为大家带来一篇js实现点击图片自动提交action的简单方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-10-10
  • 在JS中删除对象的某个属性的几种方案总结

    在JS中删除对象的某个属性的几种方案总结

    这篇文章主要介绍了在JS中删除对象的某个属性的几种方案,分别是使用delete操作符、解构赋值、Object.fromEntries()、Reflect.deleteProperty()以及如何在集合对象中应用这些方法,需要的朋友可以参考下
    2025-03-03
  • jQuery Mobile动态刷新页面样式的实现方法

    jQuery Mobile动态刷新页面样式的实现方法

    下面小编就为大家带来一篇jQuery Mobile动态刷新页面样式的实现方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-05-05
  • webpack v4 从dev到prd的方法

    webpack v4 从dev到prd的方法

    这篇文章主要介绍了webpack v4 从dev到prd的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-04-04
  • JavaScript中实现页面跳转的几种常用方法总结

    JavaScript中实现页面跳转的几种常用方法总结

    本文主要介绍了网页开发中页面跳转的概念和重要性,及使用JS实现页面跳转的几种常见方法,包括使用window.location.href,window.location.replace(),window.location.assign(),window.open(),form表单提交以及HTML的a标签等方法实现页面跳转,需要的朋友可以参考下
    2024-10-10
  • JavaScript简介

    JavaScript简介

    这篇文章主要介绍了JavaScript简介,都是非常基础的内容,有需要的小伙伴参考下吧。
    2015-02-02
  • Bootstrap复选框和单选按钮美化插件(推荐)

    Bootstrap复选框和单选按钮美化插件(推荐)

    这篇文章主要介绍了Bootstrap复选框和单选按钮美化插件的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2016-11-11
  • javascript实现简单的ajax封装示例

    javascript实现简单的ajax封装示例

    这篇文章主要介绍了javascript实现简单的ajax封装功能,结合实例形式分析了ajax基本功能与操作实现技巧,需要的朋友可以参考下
    2016-12-12
  • js控制台输出的方法(详解)

    js控制台输出的方法(详解)

    下面小编就为大家带来一篇js控制台输出的方法(详解)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-11-11

最新评论