vue_如何判断变量是数组还是对象
一、typeof判断数据类型(判断数组跟对象都返回object)
- console.log(typeof null); // "object"
- console.log(typeof function () {
- return 1;
- }); // "function"
- console.log(typeof '梦龙小站'); // "string"
- console.log(typeof 1); // "number"
- console.log(typeof a); // "undefined"
- console.log(typeof undefined); // "undefined"
- console.log(typeof []); // "object"
- console.log(typeof NaN); // "number"
- console.log(typeof {}); // "object"
二、instanceof判断对象的原型链是否是指向构造函数的prototype
- var arr = [1,2,3,1];
- console.log(arr instanceof Array)//true
三、对象的constructor属性
- var arr = [1,2,3,1];
- console.log(arr.constructor === Array)//true
四、Object.prototype.toString.call(arr)
利用对象的toString可以准确判断是什么类型,call()改变this指向,这里是借用Object的方法,然后有人可能会问为什么不直接用arr.toString而要借用Object的方法,
我们看下面
- console.log(Object.prototype.toString.call("jerry"));//[object String]
- console.log(Object.prototype.toString.call(12));//[object Number]
- console.log(Object.prototype.toString.call(true));//[object Boolean]
- console.log(Object.prototype.toString.call(undefined));//[object Undefined]
- console.log(Object.prototype.toString.call(null));//[object Null]
- console.log(Object.prototype.toString.call({name: "jerry"}));//[object Object]
- console.log(Object.prototype.toString.call(function(){}));//[object Function]
- console.log(Object.prototype.toString.call([]));//[object Array]
- console.log(Object.prototype.toString.call(new Date));//[object Date]
- console.log(Object.prototype.toString.call(/\d/));//[object RegExp]
- console.log(Object.prototype.toString.call(new Person));//[object Object]
直接用toString
- console.log("jerry".toString());//jerry
- console.log((1).toString());//
- console.log([1,2].toString());//1,2
- console.log(new Date().toString());//Wed Dec 21 2016 20:35:48 GMT+0800 (中国标准时间)
- console.log(function(){}.toString());//function (){}
- console.log(null.toString());//error
- console.log(undefined.toString());//error
因为toString为Object原型上的方法,而Array、Function都是Object的实例,实例重新改写了原型上的toString方法,不同的对象调用toString方法,调用的是改写之后的方法
(转成各种类型的字符串),而不会调用Object原型上的toString()方法,因此直接调用不能判断对象类型
- var arr=[1,2,3];
- console.log(Array.prototype.hasOwnProperty("toString"));//true
- console.log(arr.toString());//1,2,3
- delete Array.prototype.toString;//delete操作符可以删除实例属性
- console.log(Array.prototype.hasOwnProperty("toString"));//false
- console.log(arr.toString());//"[object Array]"
我们可以看到,删除实例上的toString方法后调用的是Object原型上的toString()方法,返回对象类型
五、es6的方法——Array.isArray()
- Array.isArray([]) //true
六、看好多博客说用length判断,这个其实不准确
- var obj={a:1}
- var arr = []
- console.log(obj.length)//undefined
- console.log(arr.length)//
- obj.length = 1
- console.log(obj.length)//
对象可以直接添加length这个属性,就无法区分了
vue_如何判断变量是数组还是对象的更多相关文章
- JavaScript用typeof判断变量是数组还是对象,都返回object
在JavaScript中所有数据类型严格意义上都是对象,但实际使用中我们还是有类型之分,如果要判断一个变量是数组还是对象使用typeof搞不定,因为它全都返回object. 使用typeof加leng ...
- JavaScript如何判断变量是数组还是对象
编辑 方法一:通过判断变量的类型,并且变量的length属性(除了有一种例外是arguments对象–当给函数传参时数据存储的地方) var arr=[2,3,4]; var obj={"n ...
- js 中判断变量是数组还是对象,和判断对象是否为空
判断是对象还是数组 var ids={ id:'1',num:'2' } if(Array.isArray(ids) == false) {console.log('不是数组,对象') } else ...
- Javascript中判断变量是数组还是对象(array还是object)
怎样判断一个JavaScript变量是array还是obiect? 答案: 1.如果你只是用typeof来检查该变量,不论是array还是object,都将返回‘objec'. 此问题的一个可行的答案 ...
- js判断一个变量是数组还是对象
判断变量是数组还是对象,使用Object.prototype.toString.call(),兼容性好,切勿使用typeof来判断对象或者数组,因为typeof得到的都是object: functio ...
- 判断变量是否为json对象
var m ={a:'A'}; if(typeof m == 'object' && JSON.stringify(m).indexOf('{') == 0){//判断变量m是不是js ...
- 我总结的js变量、数组、对象等基础知识
我的第一篇博客 ——JS的那些基础概念 第一次写,也不知道有没有什么套路,需不需要注意文采之类的.不管了,我就直接写主要内容吧!下面是我总结的一些关于JS的基础概念: [变量]从字面上面,变量是可变的 ...
- ES02 变量、数组、对象、方法
1 变量 1.1 变量的声明 利用var关键字来声明变量,例如: var a = 100; <!DOCTYPE html> <html> <head> <me ...
- js数组和对象相等判断、拷贝详解(结合几个现象讲解引用数据类型的趣事)
序言 最近遇到几个js引用数据类型造成的bug,今天结合bug详细分析一下,避免以后再犯,也希望能帮大家提个醒,强化js基本功. 目录 1.浅拷贝.深拷贝,解决变量赋值相互影响问题 2.判断2个数组. ...
随机推荐
- Python Ethical Hacking - Malware Analysis(2)
Filtering Command Output using Regex #!/usr/bin/env python import smtplib import subprocess import r ...
- mybatis自动生成代码插件mybatis-generator使用流程(亲测可用)
mybatis-generator是一款在使用mybatis框架时,自动生成model,dao和mapper的工具,很大程度上减少了业务开发人员的手动编码时间 坐着在idea上用maven构建spri ...
- 计算思维(Computational Thinking)在少儿编程中的体现
本文主要针对少儿编程从业人员及正在学习编程的学生家长 大家好,我是C大叔,国内早期的少儿编程从业人员.一直以来都是在做scratch,JavaScript,python以及信息学奥赛C++的讲师,教研 ...
- 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 ...
- javascript原型:写一个合并后数组去掉同类项的方法
<!DOCTYPE html> <html> <head> <title>test013_Array_prototype_unique()</ti ...
- vue : watch、computed、以及对象数组
watch和computed是vue框架中很重要的特性. 那么,他们是怎么作用于对象数组的? 今天我们就来探究一下. 上代码. <template> <div class=" ...
- 利用CloudFlare自动DDNS
注意要 仅限 DNS 获取咱的Key https://dash.cloudflare.com/profile 先在控制面板找到咱的目前IP,然后到Cloudflare中新建一个A记录,如:ddns.y ...
- Spring Data JPA根据属性名查询
https://blog.csdn.net/chengqiuming/article/details/82528961
- Android中的ANR问题
ANR:(Application Not Responding) 1.为什么会产生ANR 在Android中App的相应能力是由Activity Manager和Window Manager系统服务来 ...
- Maven中出现Could not find artifact ...:pom:0.0.1-SNAPSHOT
参考链接:https://blog.csdn.net/zpwggi123/article/details/87189959 多模块项目构建时,先将总项目install,之后子项目分别install,注 ...