有没有JavaScript类型返回"数组"?

Pet*_*ger 8 javascript arrays

我已经看到这个成语出现在各种开源项目中:

it instanceof Array || typeof it == "array"
Run Code Online (Sandbox Code Playgroud)

我知道下半部分在ECMAScript 5(或6)中不可能是真的,但是有没有一个实现会从typeof返回"数组"?或者这是一个虚假的防御性编程案例?

Ori*_*iol 5

不,至少从ECMAScript的第一个版本开始.

ECMAScript 1(1997年6月)

11.4.3 - typeof操作员

生产UnaryExpression:typeof UnaryExpression的计算方法如下:

  1. 评估UnaryExpression.
  2. 如果Type(Result(1))为Reference且GetBase(Result(1))为null,则返回"undefined".
  3. 调用GetValue(Result(1)).
  4. 根据下表返回由Type(Result(3))确定的字符串:

    • 未定义: "undefined"
    • 空值: "object"
    • 布尔: "boolean"
    • 数: "number"
    • 串: "string"
    • 对象(本机且未实现[[Call]]): "object"
    • 对象(native和implements [[Call]]): "function"
    • 对象(主机):依赖于实现

ECMAScript 2(1998年8月)

没有变化.

ECMAScript 3(1999年12月)

没有相关的变化.

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))确定的字符串:

    • 未定义: "undefined"
    • 空值: "object"
    • 布尔: "boolean"
    • 数: "number"
    • 串: "string"
    • 对象(本机且未实现[[Call]]): "object"
    • 对象(native和implements [[Call]]): "function"
    • 对象(主机):依赖于实现

ECMAScript 4

这个规范被放弃了.