1

Dmitry Baranovskiy 的博客Raphael的创建者)说 Javascript 中只有 6 种类型:

Object, Number, String, Boolean, Null, 和Undefined.

每个都可以通过(例如)轻松检查:

Object.prototype.toString.apply(undefined) //"[object Undefined]"

但是关于:

Object.prototype.toString.apply(new Date()) //"[object Date]"

Object.prototype.toString.apply(/a/)//"[object RegExp]"

……而且ArrayFunctions还有……

它们不同吗?为什么没有提到它们?

PS:

它是否与不太具体的检查有关,例如:

>>typeof [] //"object"?

4

2 回答 2

1

根据ECMAScript 语言规范,5.1 版,§8

ECMAScript 语言类型对应于 ECMAScript 程序员使用 ECMAScript 语言直接操作的值。ECMAScript 语言类型是UndefinedNullBooleanStringNumberObject

从这个定义看来,函数、数组和正则表达式都属于这种Object类型。

这对于函数来说可能看起来很奇怪,因为你可以用它们做一些你不能用其他对象做的事情:你可以调用它们。然而,这个特性只是一个内部属性,并非所有对象都具有(也在 §8 中):

表 9 — 仅为某些对象定义的内部属性

[[Call]]执行与对象关联的代码。通过函数调用表达式调用。

于 2013-06-07T10:31:43.273 回答
0

Node、Element 和 HTMLElement 不是类型,就像 Array、Date 和 RegExp 它们只是对象。

http://blogs.adobe.com/webplatform/2012/08/27/javascript-types/#comment-6038

于 2013-06-07T08:54:17.210 回答