JavaScript如何判断变量是数组还是对象
方法一:通过判断变量的类型,并且变量的length属性(除了有一种例外是arguments对象–当给函数传参时数据存储的地方)
var arr=[2,3,4];
var obj={"name":"maomao","age":20};
console.log(typeof arr); //object
console.log(typeof obj); //object
console.log(arr.length); //3
console.log(obj.length); //undefined
console.log(obj.name); //maomao
//这里说明在对象中并没有length属性,所以是未定义。
方法二:
使用toString方法将对象转换成其他类型的string,该例很好的证明了arguments对象不是数组,而是对象
var arr=[2,3,4];
var obj={"name":"maomao","age":20};
// console.log(arr.toString()); //'2,3,4'
// console.log(obj.toString()); //[object Object]
function sum(a,b){
// console.log(arguments);
// console.log(typeof arguments); //object
// console.log(arguments.length); //2 根据具体调用函数传的实参决定
// console.log(arguments.toString()); //[object Arguments]
return a+b;
}
alert(sum(3,4));
web前端JavaScript学习群:618522268
方法三: —>不可行
instanceof 指出对象是否是特定类的一个实例。
结论:instanceof 检测一个对象A是不是另一个对象B的实例的原理是:查看对象B的prototype指向的对象是否在对象A的[[prototype]]链上。如果在,则返回true,如果不在则返回false。不过有一个特殊的情况,当对象B的prototype为null将会报错(类似于空指针异常)。
var arr=[2,3,4,"haa"];
var obj={"name":"maomao","age":20};
console.log(arr instanceof Array); //true
console.log(obj instanceof Object); //true
console.log(arr instanceof Object); //true
---这里跟网上的不同,不知道是什么原因
console.log(obj instanceof Array); //false
4、ECMAScript 5中可以使用isArray来判断
var arr=[2,3,4,"haa"];
var obj={"name":"maomao","age":20};
console.log(Array.isArray(arr)); //true
console.log(Array.isArray(obj)); //false
//注意没有isObject这种方法 暂时
5、使用isPrototypeOf()函数
原理:检测一个对象是否是Array的原型(或处于原型链中,不但可检测直接父对象,还可检测整个原型链上的所有父对象)
使用方法: parent.isPrototypeOf(child)来检测parent是否为child的原型;
需注意的是isPrototypeOf()函数实现的功能和instancof运算符非常类似;
var arr=[2,3,4,"haa"];
var object={"name":"maomao","age":20};
console.log(Array.prototype.isPrototypeOf(arr)); //true
console.log(Array.prototype.isPrototypeOf(object)); //false
console.log(Object.prototype.isPrototypeOf(arr)); //true console.log(Object.prototype.isPrototypeOf(object)); //true
//从上面上看Array.prototype.isPrototypeOf()可以作为判断的依据
6、使用constructor属性
var arr=[2,3,4,"haa"];
var obj={"name":"maomao","age":20};
console.log(arr.constructor); //function Array() { [native code] }
console.log(obj.constructor); //function Object() { [native code] }
console.log(arr.constructor==Array); //true
console.log(arr.constructor==Object); //false
console.log(obj.constructor==Array); //false
console.log(obj.constructor==Object); //true
7、使用concat方法–灵活变通
array.concat(数组1,数组2,…)
返回一个新数组,这个新数组是由两个或更多数组组合而成的
var arr=[2,3,4];
var obj={"name":"maomao","age":20,'concat':function(){ return 1;}};
console.log(arr.concat()); //[2,3,4]
console.log(obj.concat()); //1 当然这个concat是我自定义上去的方法,返回值也是可以定制的。如果没有该方法则会报出Uncaught TypeError: obj.concat is not a function这个错误。
web前端JavaScript学习群618522268
JavaScript如何判断变量是数组还是对象的更多相关文章
- Javascript中判断变量是数组还是对象(array还是object)
怎样判断一个JavaScript变量是array还是obiect? 答案: 1.如果你只是用typeof来检查该变量,不论是array还是object,都将返回‘objec'. 此问题的一个可行的答案 ...
- JavaScript用typeof判断变量是数组还是对象,都返回object
在JavaScript中所有数据类型严格意义上都是对象,但实际使用中我们还是有类型之分,如果要判断一个变量是数组还是对象使用typeof搞不定,因为它全都返回object. 使用typeof加leng ...
- js 中判断变量是数组还是对象,和判断对象是否为空
判断是对象还是数组 var ids={ id:'1',num:'2' } if(Array.isArray(ids) == false) {console.log('不是数组,对象') } else ...
- vue_如何判断变量是数组还是对象
一.typeof判断数据类型(判断数组跟对象都返回object) console.log(typeof null); // "object" console.log(typeof ...
- 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 ...
- JavaScript 练习,变量,数组,函数,对象, with for 语句
JavaScript 基于对象 和 事件驱动!!! <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" ...
- 我总结的js变量、数组、对象等基础知识
我的第一篇博客 ——JS的那些基础概念 第一次写,也不知道有没有什么套路,需不需要注意文采之类的.不管了,我就直接写主要内容吧!下面是我总结的一些关于JS的基础概念: [变量]从字面上面,变量是可变的 ...
- JavaScript中判断变量类型最简洁的实现方法以及自动类型转换(#################################)
这篇文章主要介绍了JavaScript中判断整字类型最简洁的实现方法,本文给出多个判断整数的方法,最后总结出一个最短.最简洁的实现方法,需要的朋友可以参考下 我们知道JavaScript提供了type ...
随机推荐
- iOS中产生随机数的方法
利用arc4random_uniform()产生随机数 Objective-C 中有个arc4random()函数用来生成随机数且不需要种子,但是这个函数生成的随机数范围比较大,需要用取模的算法对随机 ...
- Good Bye 2015 C
C. New Year and Domino time limit per test 3 seconds memory limit per test 256 megabytes input stand ...
- bzoj1026 windy数 数位DP
windy定义了一种windy数.不含前导零且相邻两个数字之差至少为2的正整数被称为windy数. windy想知道,在A和B之间,包括A和B,总共有多少个windy数? Input 包含两个整数,A ...
- Bigbluebutton安装过程
BigBlueButton安装过程(翻译) 欢迎来到BigBlueButton 1.0-beta安装指南(以下简称BigBlueButton 1.0).BigBlueButton是一个开放源代码的网络 ...
- 增强学习Reinforcement Learning经典算法梳理3:TD方法
转自:http://blog.csdn.net/songrotek/article/details/51382759 博客地址:http://blog.csdn.net/songrotek/artic ...
- 【BZOJ3453】XLkxc [拉格朗日插值法]
XLkxc Time Limit: 20 Sec Memory Limit: 128 MB[Submit][Status][Discuss] Description 给定 k,a,n,d,p f(i ...
- 51nod 1106 质数检测——Mr判素数
质数检测一般都是根号n的写法 当然Mr判素数的方法可以实现log的复杂度2333 Mr判素数的话 我们根据费马小定理只要P是素数 那么另一个素数x 满足 x^P-1≡1(mod P) 同时 x^2%P ...
- Spring 框架的设计理念与设计模式分析(山东数漫江湖)
Spring 的骨骼架构 Spring 总共有十几个组件,但是真正核心的组件只有几个,下面是 Spring 框架的总体架构图: 图 1 .Spring 框架的总体架构图 从上图中可以看出 Spring ...
- spring boot 注解说明
Starters 可以创建自己的Starter,但名字格式不能是 spring-boot-starter-*,而是 *-spring-boot-starter.类似Maven插件的规则. 自动配置 ...
- HTTP响应码摘自apach官网
HTTP状态列表 响应码由三位十进制数字组成,它们出现在由HTTP服务器发送的响应的第一行. 响应码分五种类型,由它们的第一位数字表示: 1xx:信息,请求收到,继续处理 2xx:成功,行为被成功地接 ...