Dmitry Baranovskiy's blog(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]"
...和Array
,Functions
也......
它们有什么不同吗?他们为什么没有提到?
PS:
是否与不太具体的检查相关,如:
>>typeof [] //"object"
?
答案 0 :(得分:1)
根据ECMAScript Language Specification, 5.1 Edition, §8:
ECMAScript语言类型对应于ECMAScript程序员使用ECMAScript语言直接操作的值。 ECMAScript语言类型为Undefined,Null,Boolean,String,Number和Object 。< / 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