我已经看到这个成语出现在各种开源项目中:
it instanceof Array || typeof it == "array"
Run Code Online (Sandbox Code Playgroud)
我知道下半部分在ECMAScript 5(或6)中不可能是真的,但是有没有一个实现会从typeof返回"数组"?或者这是一个虚假的防御性编程案例?
不,至少从ECMAScript的第一个版本开始.
ECMAScript 1(1997年6月)
11.4.3 -
typeof操作员生产UnaryExpression:
typeofUnaryExpression的计算方法如下:
- 评估UnaryExpression.
- 如果Type(Result(1))为Reference且GetBase(Result(1))为null,则返回
"undefined".- 调用GetValue(Result(1)).
根据下表返回由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:
typeofUnaryExpression的计算方法如下:
- 评估UnaryExpression.
- 如果Type(Result(1))不是Reference,请转到步骤4.
- 如果GetBase(Result(1))为null,则返回
"undefined".- 调用GetValue(Result(1)).
根据下表返回由Type(Result(4))确定的字符串:
- 未定义:
"undefined"- 空值:
"object"- 布尔:
"boolean"- 数:
"number"- 串:
"string"- 对象(本机且未实现[[Call]]):
"object"- 对象(native和implements [[Call]]):
"function"- 对象(主机):依赖于实现
ECMAScript 4
这个规范被放弃了.