javascript 判断一个对象为数组的方法
数组对象
js的数组是无类型的:数组元素可以是任意类型,并且同一个数组中的不同元素也可能有不同的类型。数组的元素可以是对象或其他数组,这样就可以创建复杂的数据结构。
通常我们可以用一元运算符typeof来判断js的数据类型,但是对于数组这样一个特殊的对象却只能返回"object"
typeof [1,2,3] "object" typeof 100 "number" typeof false "boolean" typeof undefined "undefined" typeof NaN "number" typeof function(){} "function" typeof null "object"
判断数组的方法
instanceof
instanceof 是一个二元运算符,左边操作数是一个对象,不是的话返回false,右边操作数是一个函数对象或者函数构造器,不是的话返回false。原理是通过判断左操作数的对象的原型链上是否具有右操作数的构造函数的prototype属性。
[1,2] instanceof Array true
Array.isArray(arr)
这个ES5新增的一个Array方法,该方法是Array对象的一个静态函数,用来判断一个对象是不是数组。
Array.isArray([1,2]) true
如果页面里面有n个frame,就存在多个window,每个window都有自己的Array对象,比如确定子window里的某个数组是不是Array时,用instanceof这个方法就不行了
var fr=window.frames[0]; fr.onload=function(){ console.log(fr.arr instanceof Array);//false console.log(Array.isArray(fr.arr));//true //arr是另外一个页面的一个数组 }
Object.prototype.toString.call(arr) === “[object Array]”
Object.prototype.toString.call([1,2]) "[object Array]"
arr.constructor.name==='Array'
[1,2].constructor.name==='Array'; true
但是对象的constructor属性可以被改写,改写后用改方法判断就不行了
var arr=[1,2]; arr.constructor={}; arr.constructor.name === "Array" //undefined false
其他方法 可以通过数组的一些独有的方法判断该对象是不是数组,比如join,push等
var c=[1,2]; c.push('3');//3 console.log(c) [1, 2, "3"] var c="12"; c.push('3'); //Uncaught TypeError: c.push is not a function(…) var c=[1,2]; c.join(''); "12" var c='12'; c.join(''); //Uncaught TypeError: c.join is not a function(…)
总结
通过上面的几种判断对象为数组对象的方法分析,使用Array.isArray(arr)和Oblect.prototype.toString.call(arr)是比较好的方法。
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
P70系列延期,华为新旗舰将在下月发布
3月20日消息,近期博主@数码闲聊站 透露,原定三月份发布的华为新旗舰P70系列延期发布,预计4月份上市。
而博主@定焦数码 爆料,华为的P70系列在定位上已经超过了Mate60,成为了重要的旗舰系列之一。它肩负着重返影像领域顶尖的使命。那么这次P70会带来哪些令人惊艳的创新呢?
根据目前爆料的消息来看,华为P70系列将推出三个版本,其中P70和P70 Pro采用了三角形的摄像头模组设计,而P70 Art则采用了与上一代P60 Art相似的不规则形状设计。这样的外观是否好看见仁见智,但辨识度绝对拉满。