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)); //trueconsole.log(Array.prototype.isPrototypeOf(object)); //falseconsole.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); //trueconsole.log(arr.constructor==Object); //falseconsole.log(obj.constructor==Array); //falseconsole.log(obj.constructor==Object); //true7、使用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