关于 instanceof 的疑问 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐关注
Meteor
JSLint - a Javascript code quality tool
jsFiddle
D3.js
WebStorm
推荐书目
Javascript 权威指南第 5 版
Closure: The Definitive Guide
rodrick
V2EX    Javascript

关于 instanceof 的疑问

  •  
  •   rodrick 2020-12-04 10:28:24 +08:00 2356 次点击
    这是一个创建于 1843 天前的主题,其中的信息可能已经有所发展或是发生改变。

    Array instanceof Object 为什么是 true 呢,MDN 上说

    instanceof 运算符用于检测构造函数的 prototype 属性是否出现在某个实例对象的原型链上。

    [] instanceof Objecttrue 我能理解

    Array 算是一个实例对象么? 有点没搞懂

    nikandaoleshenme
        1
    nikandaoleshenme  
       2020-12-04 10:31:09 +08:00
    万物皆对象?
    VDimos
        2
    VDimos  
       2020-12-04 10:35:52 +08:00 via Android
    js 啥都是 Object,不信你看它 prototype
    shakaraka
        3
    shakaraka  
    PRO
       2020-12-04 10:37:20 +08:00   1
    Array 本质也是个对象。。。,你可以通俗理解为

    ```
    class Array {
    constructor(){}
    }
    ```


    然后根据 mdn 的解释是:Javascript 的 Array 对象是用于构造数组的全局对象,数组是类似于列表的高阶对象。

    参考: https://developer.mozilla.org/zh-CN/docs/Web/Javascript/Reference/Global_Objects/Array
    vision1900
        4
    vision1900  
       2020-12-04 10:39:40 +08:00   1
    Javascript 分 2 种类型:简单类型和对象。
    简单类型包括:number, string, boolean, null, undefined, 还有最近的 BigInt, Symbol 。
    其他类型都是对象。Array 特殊一点,他是个构造函数又是个对象,而且是内置的。
    证明是函数: typeof Array === "function"
    证明是对象:其实不用证明,函数就是对象。非得证明的话,呃,你自己已经证明了:Array instanceof Object 。
    建议深入了解下原型链
    Reapper
        5
    Reapper  
       2020-12-04 10:40:48 +08:00   1
    Object instanceof Function, Array instanceof Function, Function instanceof Object 对象分为普通对象和函数对象
    rodrick
        6
    rodrick  
    OP
       2020-12-04 10:40:57 +08:00
    @nikandaoleshenme
    @VDimos
    @wunonglin
    @vision1900
    想起来了。。Object.prototype.toString.call(Array) => [object Function]
    确实是对象,自己给自己整晕乎了。。
    tabris17
        7
    tabris17  
       2020-12-04 10:41:19 +08:00
    因为 Array.__proto__.__proto__ == Object.prototype 是 true
    iidear2015
        8
    iidear2015  
       2020-12-04 10:46:13 +08:00
    // Object 的 prototype 属性出现在了 Array 的原型链上
    Object.prototype === Array.__proto__.__proto__ // true
    morethansean
        9
    morethansean  
       2020-12-04 10:54:21 +08:00   1
    你自己都回答了……
    Array.__proto__.__proto__ === Object.prototype

    另外,MDN 中文这个实例对象是中文翻译自己加的描述,其实没有实例对象这个概念,或者说实例对象的定义就是 instanceof 的定义,那就是要么 Symbol.hasInstance 返回 true 了要么就是 constructor 的 prototype 出现在了 object 的原型链上:
    object instance of constructor
    auroraccc
        10
    auroraccc  
       2020-12-04 11:04:17 +08:00
    Array 是一个函数哇,函数本身就是一个对象
    rodrick
        11
    rodrick  
    OP
       2020-12-04 11:25:30 +08:00
    @morethansean 对,主要是看到 MDN 的翻译说“实例对象”,个人觉得对象和实例不是一个概念,一下没反应过来,看了下英文的原文就是 object
    ConnJiang
        12
    ConnJiang  
       2020-12-08 20:25:29 +08:00
    Array 是构造函数 函数源于对象
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2563 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 24ms UTC 03:41 PVG 11:41 LAX 19:41 JFK 22:41
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86