2

次のようなオブジェクトがあります。

var a = {

  b: "string",
  c: function(){
    return "i return a string"; 
  }    
}

やっている

for (var key in a) {
    console.log(typeof key);
};

b は文字列で、c は文字列を返すため、"string"、"string" を返します。

c -> 関数を返す関数はありますか?

4

5 に答える 5

3

プロパティのキーではなく型を表示したい場合は、値をtypeof演算子と一緒に使用する必要があります。

for (var key in a) {
    console.log(typeof a[key] );
};
于 2012-06-20T09:27:31.473 に答える
3

b は文字列で、c は文字列を返すため、"string"、"string" を返します。

いいえ。が返される理由stringは、属性名bと属性名cが両方とも文字列であるためです。現在、オブジェクトの値ではなく、オブジェクトのキーを反復処理しています。

d数値またはブール値を返す関数であるattribute を導入しても、 を取得できstringます。

代わりに、値自体を列挙します。

for (var x in a) {
    console.log(typeof a[x] );
};
于 2012-06-20T09:29:11.850 に答える
2

基本的に、オブジェクトのキーはそのように表現されているため、オブジェクトのキーを繰り返し処理することで常に文字列を取得します。

しかし、たとえば 次のconsole.log(typeof a[key]);ようにすると、期待される出力が得られます。

于 2012-06-20T09:28:07.040 に答える
1

誰にでもわかりやすいように、少し説明します。(とにかく、ここに私の最初の投稿。)

次のコードを試してみてください

console.log(typeof(a.c))

しかし、あなたが書いたのはプロパティ名を読んでいることです。次のコードを試して、コードの問題点を理解してください。

for (var key in a) {
    console.log(key);
};

したがって、基本的にあなたが得ているものは正しいです。すべてのプロパティ名は文字列であるためです。JSON オブジェクトには、大文字と小文字の区別、プロパティへのトラバースに必要なフル パスなど、いくつかの制限があることに注意してください。

次のようにコードを変更して、プロパティのタイプを取得します。

解決策 1:

console.log(typeof(a[key]));

解決策 2:

console.log(typeof(eval('a.'+ key)));
于 2012-06-20T09:56:11.147 に答える
1

への変更:

for (var key in a) {
    console.log(typeof a[key]);
};​

ライブデモ

console.log(typeof key); // gives you the key - "c"
console.log(typeof a[key]); // gives you the value of the "c" key - function.
于 2012-06-20T09:29:10.800 に答える