2016-04-25 90 views
5

我刚刚在W3School上阅读了关于JS中的类型转换的this article。有代表:日期对象的类型

有3种类型的对象:

  • 对象
  • 日期
  • 阵列

这让我感到困惑,因为据我所知没有Date对象与任何其他对象之间的任何差异(typeof (new Date())返回"object")。首先,我认为它很特别,因为它包含本机代码,但有几十个本地代码的函数。

这篇文章错了吗?或者有人可以告诉我为什么Date对象非常特别,它被认为是一种单独的对象类型?

+5

你应该不是真的“信任”是什么'typeof'回报。毕竟,'typeof null'是'“object”':) –

+2

虽然W3School最近有很大的改进,但您不应该相信网站,因为它仍然包含误导性信息。建议改为阅读MDN。 – Raptor

+2

这些内置对象(https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects)比那三个更多 - 对于任何特定的对象类型没有什么特别的 - 他们只是API接口。 – Emissary

回答

9

Lemme告诉你一个基本的东西。 W3Schools中的文章绝对过时,因此您绝对不能依赖它。是的,当你把这个控制台:

typeof (new Date()) 

上面的代码返回object因为JavaScript有只有几个原始类型:

您可以检查它是否是一个date对象或不使用:

(new Date()) instanceof Date 

上述代码将返回true。这是检查特定变量是否为特定类型实例的正确方法。

+0

除* instanceof *不能跨帧使用。 – RobG

+0

@RobG为什么'frame'在这里?你究竟意味着什么? –

+0

如果日期跨帧传递,那么它不会是第二帧中的Date构造函数的实例。见[*这个问题*](http://stackoverflow.com/questions/6473273/why-are-myarray-instanceof-array-and-myarray-constructor-array-both-false-wh/6473338#6473338),它是关于数组,但对于在另一个框架中创建的任何对象都是如此。 – RobG

1

您可能要检查的对象,作为一个特定类型的实例也通过验证其是否具有特定于所涉及的对象类型的方法:

if (myobject.hasOwnProperty("getUTCMilliseconds")) { 
    // myobject is a Date... 

同样的技术可以帮助你识别JavaScript数组:
检查

typeof(myobject) 

产量"object",不"array"如果myobject真的是一个数组,所以我用

if (myobject.hasOwnProperty("slice")) { 
    // we are dealing with an array here ... 
相关问题