在 JavaScript 中,如果数组,函数是对象原型,那么为什么 TypeOf 返回
in javascript if arrays, functions are objects prototypes then why typeof returns
在 JavaScript 中,如果数组、函数是对象原型,那么为什么 TypeOf 为保存数组的变量返回对象,并为保存对函数的引用的变量返回函数。
根据 ECMAScript 3.0 规范(第 46 - 47 页):
11.4.3 运算符的类型
生产 UnaryExpression : typeof UnaryExpression 是 评估如下:
- 计算一元表达式。
- 如果 Type(Result(1)) 不是 Reference,请转到步骤 4。
- 如果 GetBase(Result(1)) 为 null,则返回 "undefined"。
- 调用 GetValue(Result(1))。
- 根据下表返回由 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 万个结果。:)
相关文章:
- 为什么要包装每一个原型“;类“;JS中具有匿名函数的对象
- 为什么JSON.stringify没有序列化原型值
- 为什么要返回'这'在导致循环的JavaScript原型中
- 为什么我要将函数添加到对象原型中,而不是将其添加到对象中
- 为什么原型需要通过实例访问
- 为什么不't loadash/aunderline将util方法放在数组原型上
- 为什么原型允许多个实例共享变量
- 为什么属性存在于对象实例上,即使其原型发生了更改
- 为什么在原型中定义属性被视为反模式
- 为什么函数对象的实例没有继承函数原型属性
- 为什么浏览器显示原型属性不同
- 为什么在Function.prototype上没有原型属性
- 为什么javascript对象原型被称为“fn”
- 为什么我不能重新定义函数'它的原型来自内部
- document.registerElement-为什么我们需要同时指定'原型'和'扩展'
- 为什么new object()创建的对象的原型未定义
- 在原型&为什么失去了这方面的背景
- 为什么不能使用lambda来定义原型函数
- 为什么javascript中的原型对于继承是必要的
- JS原型 ─为什么是“未定义”