2016-09-13 6 views
3

は、関数とそのデータ型の簡単な例です:JavaScriptのデータ型の有効機能

コードスニペット:

function hello(){ 
    console.log("hello"); 
} 
console.log(typeof(hello)); //function 

問い合わせ:JavaScriptで

これらはデータ型です:

1. Object 
2. Primitives - String, number, boolean, null, undefined, symbol(ECMA6) 

'function'という名前のデータ型が存在しない場合、どのようにデータ型を)としますか(論理的には正しいですが)。また、関数のデータ型はオブジェクトであると書かれています。だから、オブジェクトという結果が得られたに違いない。

誰かがこの混乱を明確にすることはできますか?

+0

[__型演算子は、未評価のオペランドの型を示す文字列を返します.__](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Operators/typeof)データ型 ' – Rayon

+0

''関数' 'は仕様書が返すと言っているものなのですか? (これは意味がありますが、 'typeof null'は' 'object" 'を返します)。 – nnnnnn

+0

はいこれらの場合はどちらも混乱します。また、typeof以外の変数のデータ型をテストする他の方法がありますか?specを返すか、評価されないオペランドの型を示しますか? (上記の2つのコメントによると) – Deadpool

答えて

4

はい、そうです。functionタイプはありません。typeof演算子のちょうどハックで、呼び出し可能なオブジェクトの場合は"function"を返します。

参考:http://www.ecma-international.org/ecma-262/6.0/#sec-typeof-operator

一般的に言って、typeofは、2つの例外を除いて、実際の型名を返しません:

  • typeof null戻りobjectを、しかしnullのタイプはNull
  • typeof <func>戻りfunctionあり、 <func>のタイプはObject
  • です。
+0

これは正解がオブジェクトのみであるべきであることを意味しますが、現在のシナリオでは「機能を提供していますが、実際には「オブジェクト」だったはずです。 – Deadpool

+0

@Peterson:はい、更新を参照 – georg

+0

また例外リストにtypeof(Nan)=== "number"を追加してください! – Deadpool

2

カイル・シンプソンによって「あなたはJSの本を知らない」:

だから、typeofを返すことができ七文字列値は何ですか?

typeof function a(){ /* .. */ } === "function"; // true 

それは その機能が内蔵されたタイプJSでトップレベル、typeof演算子のこの行動与えられ、特に ことだと思うのは簡単です。しかし、 の仕様を読んだ場合、それは実際にはオブジェクトの「サブタイプ」であることがわかります。 特に、関数は「呼び出し可能オブジェクト」と呼ばれます。 を呼び出すことができる内部の[[Call]]プロパティを持つ オブジェクトです。

"呼び出し可能な"オブジェクトと "呼び出し不可能な"オブジェクトを区別するようにしました。

+0

これを見ると、関数はデータ型そのものか、少なくとも関数を返すのではなく、少なくとも戻りたいと考えています。typeof returnは "callable object"でした。 – Deadpool

+0

関数には、プロトタイプ、プロパティ( "length" - 引数の数、 "名前"など)、メソッド(オブジェクト固有の "toString"、 "valueOf"など)などのオブジェクト動作があります。別のタイプではなくオブジェクトのサブタイプである理由です。 「機能」という言葉は、他の言語から来た人々の混乱を避けるために使用される可能性が高い。 – EternalLight

関連する問題