de-vraag
  • 質問
  • タグ
  • ユーザー
通知:
報酬:
登録
登録すると、質問に対する返答やコメントが通知されます。
ログイン
すでにアカウントをお持ちの方は、ログインして新しい通知を確認してください。
追加された質問、回答、コメントには報酬があります。
さらに
ソース
編集
 maxedison
maxedison
質問

このオブジェクトのプロパティが定義されていないのはなぜですか?

以下のコードを考えてみましょう。最初の console.log はイメージを正しくログに記録し、そのイメージは下のイメージで確認できます。しかし、そのプロパティをコンソールにログオンすると、 undefined が表示されます。

console.log(that.data[0].cards); //works -- see image below
console.log(that.data[0].cards.E); //undefined
console.log(that.data[0].cards['E']); //undefined
console.log(that.data[0].cards.hasOwnProperty('E')); //false

var test = JSON.stringify(that.data[0]);
console.log(test);//{}

for( var key in that.data[0].cards ) {
    console.log('hello????') //doesn't appear in the console
}

console.log( Object.keys( that.data[0].cards ) ); //[]
console.log( that.data[0].cards.propertyIsEnumerable("E") ); //false
console.log( that.data[0].cards.__lookupGetter__( "E" ) ); //undefined

コンソールの結果:

enter image description here

ここで何が起こっているか考えてみましょうか?また、 that.data [0] の中の xml プロパティもその内部にプロパティを持つ必要があります。/code>

FWIW、Firebugでも同じことが起こります(上記のコンソールイメージはChromeです)。

11 2011-10-27T20:51:44+00:00 2
 maxedison
maxedison
編集された質問 27日 10月 2011 в 9:31
プログラミング
javascript
object
undefined
object-properties
maxedison
28日 10月 2011 в 12:58
2011-10-28T12:58:15+00:00
さらに
ソース
編集
#56793062

私は問題を解決しました。基本的に、問題のオブジェクト( that.data [0] .cards )は、必要なすべてのAJAXリクエストの後に実行される関数 a() XMLファイルが処理されました。 a()をまだ呼び出す必要がある場合は、 success コールバック関数で決定するためのカウンタを使用して、リクエストを非同期で実行できます。

a()を実行した後、 b()関数は that.data [i] .cards で操作を実行することになっています。しかし、 a()が非同期要求に依存しているため、 a()が呼び出される前に b()が実行されていました。だから、解決策は単に a()を b()にすることでした。

だから、これはかなり単純な間違いであった。それを紛らわしかったのは、コンソールに that.data [0] .cards を記録すると、実際には cards オブジェクトが実際にはそれはまだありませんでした。だからコンソールは間違った、あるいは少なくとも不明な情報を私に提供していた。

昨夜みんなの助けてくれてありがとう! Upvotesの周りに:)

12
0
Esailija
27日 10月 2011 в 9:00
2011-10-27T21:00:34+00:00
さらに
ソース
編集
#56793061

オブジェクトキーには印刷できない文字があると思います。このように複製することができます:

var obj = {};
obj["E"+String.fromCharCode(15)] = new Array(15);

console.log(obj);

/*Object
E: Array[15]
__proto__: Object*/

console.log(obj.E)

//undefined

console.log( obj["E"+String.fromCharCode(15)] )

//[]

編集:これはあなたのオブジェクトキーの場合は表示されます:

var realKeys = [];

for( var key in obj ) {
realKeys.push( [].slice.call( key ).map( function(v){return v.charCodeAt(0);} ).join(" ") );
}

//["69 15"] (69 stands for the letter "E" and 15 was the unprintable character I added manually)

Edit2:あなたはそれを行うことができないので、私は印刷できない文字があるかどうかを調べる別の方法を思いついた:

このようなキー文字列をコピーしてください(両端にできるだけ長く移動して、目に見えない文字を選択してください)

次にクリップボードをこのようにダンプします(二重引用符を使用していることを確認してください)。

7
0
関連コミュニティ 1
JavaScript - 日本のコミュニティ
JavaScript - 日本のコミュニティ
4 ユーザー
日本人コミュニティのjavascript @react_ja @php_ja @angular_ja @vue_ja
開く telegram
質問の追加
カテゴリ
すべて
技術情報
文化・レクリエーション
生活・芸術
科学
プロフェッショナル
事業内容
ユーザー
すべて
新しい
人気
1
Roxana Elizabeth CASTILLO Avalos
登録済み 6日前
2
Hideo Nakagawa
登録済み 1週間前
3
Sergiy Tytarenko
登録済み 1週間前
4
shoxrux azadov
登録済み 1週間前
5
Koreets Koreytsev
登録済み 1週間前
© de-vraag :年
ソース
stackoverflow.com
ライセンス cc by-sa 3.0 帰属