【问题标题】:in javascript if arrays, functions are objects prototypes then why typeof returns在javascript中,如果数组,函数是对象原型,那么为什么typeof会返回
【发布时间】:2015-01-18 04:44:55
【问题描述】:

在javascript中,如果数组,函数是对象原型,那么为什么typeof为保存数组的变量返回对象,而为保存对函数的引用的变量返回Function。

【问题讨论】:

  • 您是指typeof 还是instanceof?因为这个Boolean(function(){} instanceof Object) 是真的。
  • 对不起,我的意思是 typeof,我已经编辑了邮件正文
  • typeof 总是返回 string
  • 嗯,对于诸如“为什么在 javascript 中?”之类的问题,有一个包罗万象的答案。 - 因为他们只有十天的时间来创建它。就像我们生活的世界一样。

标签: javascript typeof


【解决方案1】:

根据the ECMAScript 3.0 specification(第 46 - 47 页):

11.4.3 typeof 运算符

产生式 UnaryExpression : typeof UnaryExpression 是 评价如下:

  1. 评估 UnaryExpression。
  2. 如果 Type(Result(1)) 不是 Reference,请转到步骤 4。
  3. 如果 GetBase(Result(1)) 为 null,则返回 "undefined"
  4. 调用 GetValue(Result(1))。
  5. 根据下表返回由Type(Result(4))确定的字符串:
Type                                              Result
Undefined                                         "undefined"
Null                                              "object"
Boolean                                           "boolean"
Number                                            "number"
String                                            "string"
Object (native and doesn’t implement [[Call]])    "object"
Object (native and implements [[Call]])           "function"
Object (host)                                     Implementation-dependent

我在 1.0 规范中找不到对 typeof 的任何引用,虽然 wikipedia 引用了 2.0 规范,但我在网上找不到它。

虽然georg 给人一种可爱的感觉,但似乎typeof 一元运算符是在最初发布后的某个时间被添加到 JavaScript 中的(因此必须考虑一些想法)。

也就是说,有很多方法可以绕过这些限制。只需谷歌“fixing typeof”...大约有 4170 万条结果。 :)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-07-03
    • 2022-12-13
    • 2017-07-16
    • 1970-01-01
    • 1970-01-01
    • 2018-02-01
    相关资源
    最近更新 更多