在 JavaScript 中,如果数组,函数是对象原型,那么为什么 TypeOf 返回

in javascript if arrays, functions are objects prototypes then why typeof returns

本文关键字:原型 为什么 TypeOf 对象 返回 JavaScript 如果 数组 函数      更新时间:2023-09-26

在 JavaScript 中,如果数组、函数是对象原型,那么为什么 TypeOf 为保存数组的变量返回对象,并为保存对函数的引用的变量返回函数。

根据 ECMAScript 3.0 规范(第 46 - 47 页):

11.4.3 运算符的类型

生产 UnaryExpression : typeof UnaryExpression 是 评估如下:

  1. 计算一元表达式。
  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的引用,虽然维基百科引用了 2.0 规范,但我无法在网上找到它。

虽然 georg 提出了一个可爱的观点,但似乎 typeof 一元运算符是在初始发布后的某个时候添加到 JavaScript 中的(所以必须考虑一下)。

也就是说,有很多方法可以解决这些限制。只是谷歌"修复类型"...大约有 4170 万个结果。:)