扫码关注官方订阅号
例如如下代码
console.log(typeof(new Array())); console.log(typeof([]));
它们的输出都是object,为什么不是array呢?那么我们怎么判断一个对象是普通的object还是array类型呢?
object
array
业精于勤,荒于嬉;行成于思,毁于随。
我还见过一种比较巧妙的判断方法
console.log(Object.prototype.toString.call([]));
它会输出[object Array],这样你就可以判断它的类型了
[object Array]
参考jQuery的解决方案
var class2type = {}; $.each("Boolean Number String Function Array Date RegExp Object".split(" "), function (i, name) { class2type[ "[object " + name + "]" ] = name.toLowerCase(); }); $.type = function (obj) { return obj == null ? String(obj) : class2type[ toString.call(obj) ] || "object" };
在ECMA中,除了Number,String,null,undefined,Boolean,其它的实例都会归为object。而创建Function或者Array这些类型的实例的时候,其实都是基于Object实例进行的一种扩展。只是多了一些特有属性。判断一个对象是一个数组还是普通的Object可以使用Array.isArray的方法。然而这个方法会因为在跨iframe的情况下失效。最简单的办法是Object.prototype.toString.call(array)的方式。因为只有通过Object的原型的toString方法才能拿到每个实例的[class]内部属性。这些内容都能到ECMA5.1的官方文档找到哈。
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
我还见过一种比较巧妙的判断方法
它会输出
[object Array],这样你就可以判断它的类型了参考jQuery的解决方案
var class2type = {}; $.each("Boolean Number String Function Array Date RegExp Object".split(" "), function (i, name) { class2type[ "[object " + name + "]" ] = name.toLowerCase(); }); $.type = function (obj) { return obj == null ? String(obj) : class2type[ toString.call(obj) ] || "object" };在ECMA中,除了Number,String,null,undefined,Boolean,其它的实例都会归为object。而创建Function或者Array这些类型的实例的时候,其实都是基于Object实例进行的一种扩展。只是多了一些特有属性。判断一个对象是一个数组还是普通的Object可以使用Array.isArray的方法。然而这个方法会因为在跨iframe的情况下失效。最简单的办法是Object.prototype.toString.call(array)的方式。因为只有通过Object的原型的toString方法才能拿到每个实例的[class]内部属性。这些内容都能到ECMA5.1的官方文档找到哈。