一、typeof判断数据类型(判断数组跟对象都返回object)

  1. console.log(typeof null); // "object"
  2. console.log(typeof function () {
  3. return 1;
  4. }); // "function"
  5. console.log(typeof '梦龙小站'); // "string"
  6. console.log(typeof 1); // "number"
  7. console.log(typeof a); // "undefined"
  8. console.log(typeof undefined); // "undefined"
  9. console.log(typeof []); // "object"
  10. console.log(typeof NaN); // "number"
  11. console.log(typeof {}); // "object"

二、instanceof判断对象的原型链是否是指向构造函数的prototype

  1.   var arr = [1,2,3,1];
  2.   console.log(arr instanceof Array)//true

三、对象的constructor属性

  1.   var arr = [1,2,3,1];
  2.   console.log(arr.constructor === Array)//true

四、Object.prototype.toString.call(arr)
  利用对象的toString可以准确判断是什么类型,call()改变this指向,这里是借用Object的方法,然后有人可能会问为什么不直接用arr.toString而要借用Object的方法,
  我们看下面
  

  1. console.log(Object.prototype.toString.call("jerry"));//[object String]
  2. console.log(Object.prototype.toString.call(12));//[object Number]
  3. console.log(Object.prototype.toString.call(true));//[object Boolean]
  4. console.log(Object.prototype.toString.call(undefined));//[object Undefined]
  5. console.log(Object.prototype.toString.call(null));//[object Null]
  6. console.log(Object.prototype.toString.call({name: "jerry"}));//[object Object]
  7. console.log(Object.prototype.toString.call(function(){}));//[object Function]
  8. console.log(Object.prototype.toString.call([]));//[object Array]
  9. console.log(Object.prototype.toString.call(new Date));//[object Date]
  10. console.log(Object.prototype.toString.call(/\d/));//[object RegExp]
  11. console.log(Object.prototype.toString.call(new Person));//[object Object]

直接用toString

  1. console.log("jerry".toString());//jerry
  2. console.log((1).toString());//
  3. console.log([1,2].toString());//1,2
  4. console.log(new Date().toString());//Wed Dec 21 2016 20:35:48 GMT+0800 (中国标准时间)
  5. console.log(function(){}.toString());//function (){}
  6. console.log(null.toString());//error
  7. console.log(undefined.toString());//error

  因为toString为Object原型上的方法,而Array、Function都是Object的实例,实例重新改写了原型上的toString方法,不同的对象调用toString方法,调用的是改写之后的方法

  (转成各种类型的字符串),而不会调用Object原型上的toString()方法,因此直接调用不能判断对象类型

  1. var arr=[1,2,3];
  2. console.log(Array.prototype.hasOwnProperty("toString"));//true
  3. console.log(arr.toString());//1,2,3
  4. delete Array.prototype.toString;//delete操作符可以删除实例属性
  5. console.log(Array.prototype.hasOwnProperty("toString"));//false
  6. console.log(arr.toString());//"[object Array]"

  我们可以看到,删除实例上的toString方法后调用的是Object原型上的toString()方法,返回对象类型

五、es6的方法——Array.isArray()

  

  1. Array.isArray([]) //true

六、看好多博客说用length判断,这个其实不准确

  1. var obj={a:1}
  2. var arr = []
  3. console.log(obj.length)//undefined
  4. console.log(arr.length)//
  5.  
  6. obj.length = 1
  7. console.log(obj.length)//

对象可以直接添加length这个属性,就无法区分了

vue_如何判断变量是数组还是对象的更多相关文章

  1. JavaScript用typeof判断变量是数组还是对象,都返回object

    在JavaScript中所有数据类型严格意义上都是对象,但实际使用中我们还是有类型之分,如果要判断一个变量是数组还是对象使用typeof搞不定,因为它全都返回object. 使用typeof加leng ...

  2. JavaScript如何判断变量是数组还是对象

    编辑 方法一:通过判断变量的类型,并且变量的length属性(除了有一种例外是arguments对象–当给函数传参时数据存储的地方) var arr=[2,3,4]; var obj={"n ...

  3. js 中判断变量是数组还是对象,和判断对象是否为空

    判断是对象还是数组  var ids={ id:'1',num:'2' } if(Array.isArray(ids) == false) {console.log('不是数组,对象') } else ...

  4. Javascript中判断变量是数组还是对象(array还是object)

    怎样判断一个JavaScript变量是array还是obiect? 答案: 1.如果你只是用typeof来检查该变量,不论是array还是object,都将返回‘objec'. 此问题的一个可行的答案 ...

  5. js判断一个变量是数组还是对象

    判断变量是数组还是对象,使用Object.prototype.toString.call(),兼容性好,切勿使用typeof来判断对象或者数组,因为typeof得到的都是object: functio ...

  6. 判断变量是否为json对象

    var m ={a:'A'}; if(typeof m == 'object' && JSON.stringify(m).indexOf('{') == 0){//判断变量m是不是js ...

  7. 我总结的js变量、数组、对象等基础知识

    我的第一篇博客 ——JS的那些基础概念 第一次写,也不知道有没有什么套路,需不需要注意文采之类的.不管了,我就直接写主要内容吧!下面是我总结的一些关于JS的基础概念: [变量]从字面上面,变量是可变的 ...

  8. ES02 变量、数组、对象、方法

    1 变量 1.1 变量的声明 利用var关键字来声明变量,例如: var a = 100; <!DOCTYPE html> <html> <head> <me ...

  9. js数组和对象相等判断、拷贝详解(结合几个现象讲解引用数据类型的趣事)

    序言 最近遇到几个js引用数据类型造成的bug,今天结合bug详细分析一下,避免以后再犯,也希望能帮大家提个醒,强化js基本功. 目录 1.浅拷贝.深拷贝,解决变量赋值相互影响问题 2.判断2个数组. ...

随机推荐

  1. Python Ethical Hacking - Malware Analysis(2)

    Filtering Command Output using Regex #!/usr/bin/env python import smtplib import subprocess import r ...

  2. mybatis自动生成代码插件mybatis-generator使用流程(亲测可用)

    mybatis-generator是一款在使用mybatis框架时,自动生成model,dao和mapper的工具,很大程度上减少了业务开发人员的手动编码时间 坐着在idea上用maven构建spri ...

  3. 计算思维(Computational Thinking)在少儿编程中的体现

    本文主要针对少儿编程从业人员及正在学习编程的学生家长 大家好,我是C大叔,国内早期的少儿编程从业人员.一直以来都是在做scratch,JavaScript,python以及信息学奥赛C++的讲师,教研 ...

  4. noi-vim配置

    colorscheme ron set t_Co=256 set mouse=a set ts=4 set sw=4 set nu set ru set ai set ci set cin set l ...

  5. javascript原型:写一个合并后数组去掉同类项的方法

    <!DOCTYPE html> <html> <head> <title>test013_Array_prototype_unique()</ti ...

  6. vue : watch、computed、以及对象数组

    watch和computed是vue框架中很重要的特性. 那么,他们是怎么作用于对象数组的? 今天我们就来探究一下. 上代码. <template> <div class=" ...

  7. 利用CloudFlare自动DDNS

    注意要 仅限 DNS 获取咱的Key https://dash.cloudflare.com/profile 先在控制面板找到咱的目前IP,然后到Cloudflare中新建一个A记录,如:ddns.y ...

  8. Spring Data JPA根据属性名查询

    https://blog.csdn.net/chengqiuming/article/details/82528961

  9. Android中的ANR问题

    ANR:(Application Not Responding) 1.为什么会产生ANR 在Android中App的相应能力是由Activity Manager和Window Manager系统服务来 ...

  10. Maven中出现Could not find artifact ...:pom:0.0.1-SNAPSHOT

    参考链接:https://blog.csdn.net/zpwggi123/article/details/87189959 多模块项目构建时,先将总项目install,之后子项目分别install,注 ...