2016-04-25 15 views
5

JSでタイプ変換についてW3Schoolsでthis articleと読みました。そこ略:Dateオブジェクトのタイプ

オブジェクトの3種類があります。私の知る限りではありませんので

  • オブジェクト
  • アレイは、これは私の混乱は、 Dateオブジェクトと他のオブジェクト(typeof (new Date())"object"を返します)。まず、ネイティブコードが含まれているので特別だと思っていましたが、ネイティブコードで数十の機能があります。

    この記事は間違っていますか?または、なぜ誰も私がなぜDateオブジェクトがそれが別のタイプのオブジェクトと見なされるほど非常に優れているのかを教えてもらえますか?

+5

を使用しています。結局のところ、 'typeof null'は' 'object ''です。 –

+2

W3Schoolsは最近よく改良されましたが、誤解を招くような情報が含まれているため、サイトを信用すべきではありません。代わりにMDNを読むことをお勧めします。 – Raptor

+2

これらの3つよりもはるかに多くの[組み込みオブジェクト](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects)があります。特定のオブジェクトタイプについて特別なものは何もありません。それらは単なるAPIインタフェースです。 – Emissary

答えて

9

Lemmeは基本的なことを教えてくれます。 W3Schoolsの記事は間違いなく古いものなので、あなたはそれに頼らないでください。はい、あなたはコンソールでこれを与えるとき:

typeof (new Date()) 

上記のコードをJavaScriptがほんの数プリミティブ型を持っているのでobjectを返します。

それはdateオブジェクトであるかどうかを確認することができますか使用しない:

(new Date()) instanceof Date 

上記のコードはtrueを返します。これは、特定の変数が特定の型のインスタンスであるかどうかをチェックする正しい方法です。

+0

* instanceof *はフレーム間では動作しません。 – RobG

+0

@RobGなぜ 'フレーム 'がここに来るのですか?そして、あなたはどういう意味ですか? –

+0

日付がフレームに渡された場合、それは2番目のフレームの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) 

利回り0123をチェックしますは、ない"array"myobject場合は本当に配列ですので、私はあなたがすべきではない、本当に「信頼」何 `typeof`戻り

if (myobject.hasOwnProperty("slice")) { 
    // we are dealing with an array here ... 
関連する問題