18

彼のEloquentJavascriptで、Haverbekeは次のように主張しています(16ページ)。

「JavaScriptシステムでは、このデータのほとんどは値と呼ばれるものにきちんと分けられています。すべての値には、果たすことができる役割の種類を決定するタイプがあります。値には、数値、文字列、ブール値、オブジェクト、関数、および未定義の値。」

しかし、JavascriptのCrockford: TheGoodPartsは次のように述べています。

「JavaScriptの単純なタイプは、数値、文字列、ブール値(trueおよびfalse)、null、および未定義です。他のすべての値はオブジェクトです。数値、文字列、およびブール値は、メソッドがあるという点でオブジェクトに似ていますが、不変です。 JavaScriptのオブジェクトは、可変のキー付きコレクションです。JavaScriptでは、配列はオブジェクト、関数はオブジェクト、正規表現はオブジェクト、そしてもちろんオブジェクトはオブジェクトです。」

さて、少なくともV8の下では、私はこれを手に入れます:

> typeof function(){};
'function'
> typeof {};
'object'

オブジェクトが型で関数がオブジェクトなのか、関数とオブジェクトが両方とも型なのかわかりません。プリミティブ型と他の種類の型(複合型?)の区別が欠けていると思います。

4

3 に答える 3

24

それらは一種のオブジェクトです。

typeof"function":_

typeof (function() {}) === "function" // true

内部[[Class]][object Function]

({}).toString.call(function() {}) === "[object Function]" // true

Functionこれらはコンストラクタープロトタイプのインスタンスです。

(function(){}) instanceof Function // true

Objectこれらはコンストラクタープロトタイプのインスタンスです。

(function(){}) instanceof Object // true
于 2013-03-14T02:10:34.923 に答える
5

javascriptの型について話すときは注意する必要があります。値にはタイプがあり、次のいずれかになります。

  1. 未定義
  2. ヌル
  3. ブール値
  4. 番号
  5. 物体

typeof逆に、演算子によって返される値はTypeではなく、ほとんどの値のTypeと同じ文字列ですが、次の場合は異なります。

  1. タイプがNullであっても、Nullは「オブジェクト」を返します
  2. [[Call]]タイプがオブジェクトであっても、returns関数を実装するオブジェクト
  3. ホストオブジェクトは、制限された値の1つ以外は好きなものを返すことができます

つまり、関数のタイプはObjectですが、 。をtypeof someFn返しますfunction

于 2013-03-14T02:46:12.987 に答える
-1

JavaScriptは関数型プログラミングをサポートしています。その結果、すべてのJavaScript関数はファーストクラスの関数になります。つまり、関数は通常のオブジェクトのように扱われます。

http://en.wikipedia.org/wiki/First-class_functions

于 2013-03-14T02:16:13.547 に答える