Javascript完整类型清单澄清?

时间:2013-06-07 08:47:19

标签: javascript types

Dmitry Baranovskiy's blogRaphael的创建者)说Javascript中只有6种类型:

ObjectNumberStringBooleanNullUndefined

每个都可以通过(例如):

轻松检查
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"

2 个答案:

答案 0 :(得分:1)

根据ECMAScript Language Specification, 5.1 Edition, §8

  

ECMAScript语言类型对应于ECMAScript程序员使用ECMAScript语言直接操作的值。 ECMAScript语言类型为UndefinedNullBooleanStringNumberObject 。< / p>

从这个定义看,函数,数组和正则表达式似乎都是Object类型。

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

  

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

     

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

答案 1 :(得分:0)

  

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

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