4

何かを受け取るメソッドがあり、受け取った値のタイプを判別する必要があります。typeof数字や文字列のように定期的に比較することができます。しかし、JSONオブジェクトに対してこれを行うにはどうすればよいですか?それらをと比較するとJSON、エラーが発生します。

Uncaught TypeError:instanceof checkで関数を期待していますが、#<Object>を取得しました

では、JSONオブジェクトタイプをと比較するのJSONは方法ではないと思いますか?

元のコードは次のようなものです。

check = (what) ->
  if what instanceof JSON
    alert "Yooo"

check({compare: "me"})
4

4 に答える 4

4

タイプはobjectではなくになりJSONます。作業しているものを確認するには、探しているプロパティがあるかどうかを確認できます。長さを確認するか、特定のキーがあるかどうかを確認してください。

これは、JSON の操作に関する非常に優れた情報ページです。JavaScript での JSON

于 2012-07-01T19:11:20.600 に答える
1
class JSON
   constructor: (@data) ->

   get: (key) ->
     @data[key]

   set: (key, value) ->
     @data[key] = value

a = new JSON "foo":"My foo", "bar" : 4

a.get('foo')
a.data.foo
a.data['foo']

console.log(a instanceof JSON)

:Dただし、少なくともJSONタイプを作成するために、これを行うべきではありません。ただし、ほとんどすべての場合に独自のラッパーを作成できる可能性があります。これをObject.definePropertyと組み合わせて、@ dataに基づいてゲッターとセッターをセットアップすると、いくつかの強力な処理を実行できます。method_missingメソッドはありませんが、Object.definePropertyを使用して同様の結果を得ることができます。

于 2012-07-05T07:39:25.517 に答える
1

1つ目は文字列を返します。2 つ目は、可能な戻り値にtype ofType のようなものはありません。詳しくはこちらのページをご覧くださいJSONtype of

あなたの場合はあなたが受け取ります"object"

于 2012-07-01T19:18:22.650 に答える
1

JSON は JavaScript Object notation の略で、単に JavaScript でオブジェクト リテラルを記述する方法の名前であり、型ではありません。

var a = {"foo":"My foo","bar" : 4};
var b = {"foo":"My foo","bar" : 0};
var c = {"foo":"My c foo","barella" : -1};
var d = '{"baz":"My baz","bar" : 4}';

a、b、c、および d はすべて、オブジェクト型の最初の 3 つは string 型の 4 番目のオブジェクトです。型理論の観点から、最初の 2 つは同じ型であると言えます。その場合eval("var e =" + d)、d にある文字列が評価され、d は JSON にシリアル化されたオブジェクトであるため、結果は e に割り当てられる有効なオブジェクトになります。

つまり、JSON は型ではなく、JavaScript 文法の一部であり、JSON を評価した結果はオブジェクトであり、そのオブジェクトの型はオブジェクト リテラルによって異なります。そのようなオブジェクトで使用typeofすると、「オブジェクト」が生成されます(オブジェクトの型理論的な型はあまり考慮されません)。

特定のタイプに対してテストしてオブジェクトを作成したい場合は、予想されるすべてのプロパティとメソッドについてテストする必要があります。

于 2012-07-01T19:21:26.110 に答える