数组 - javascript中Array的类型为什么是object?
迷茫
迷茫 2017-04-10 14:34:09
[JavaScript讨论组]

例如如下代码

console.log(typeof(new Array()));
console.log(typeof([]));

它们的输出都是object,为什么不是array呢?那么我们怎么判断一个对象是普通的object还是array类型呢?

迷茫
迷茫

业精于勤,荒于嬉;行成于思,毁于随。

全部回复(3)
怪我咯

我还见过一种比较巧妙的判断方法

console.log(Object.prototype.toString.call([]));

它会输出[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中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号