2009-03-05 9 views
1

誰でもjavascriptがこれを行う方法の説明を持っていますか?どういうわけか、この関数はまったく同じ時刻に真と偽の両方です。これは単なるパスであり、ループも何もありません。Javascript:これは同時に真と偽に評価されます!何が起こっている?

console.log(key); 
    if (this.watches.get(key)) { 
     console.log("found it"); 
    } else { 
     console.log("whhhat?"); 
    } 
    console.log(this.watches); 

Firebug Consoleログはそのままです。

search-key 
found it 
Object search-key=Object $family=Object 
whhhat? 
Object search-key=Object $family=Object 

[EDIT] はここにあります。上の出力の完全なスクリプトとブロックは、ファイヤーバグからのコピー&ペーストです。これは私が今まで見た中でもっとも不思議なものです。 http://snipt.org/Hkl

私はmootoolsフレームワークを使用していますのでthis.watches = $ H({});を使用します。ハッシュテーブルです。私は配列を使用していて、まったく同じ問題を経験していて、何か間違っていると思って$ H({})に切り替えました。

+0

本当ですか? /もう一度チェックできますか? ...それは正確なコードですか? – eglasius

+0

あなたが本当に1回のパスを行っているのであれば、出力は意味をなさない。 1回のパスでしか通過しない場合は、 "Object search-key = [...]"出力を2回記録するコンソールで終わるべきではありません。 –

+0

ダニエル、私が知っているのは、このコードがここにある理由です。 –

答えて

9

この

Object search-key=Object $family=Object 

がによって生成されている場合:

console.log(this.watches); 

その後、これは明らかにだけではなく、1回のパスです。

これはループであるとは限りません。このコードが複数回呼び出されているだけです。

一つは

はなぜ検索キーは一度だけ、その後まで見せていると言うかもしれませんか?

答えは次のとおりです。すべてのコードが表示されないため、わからないのです。

>>> console.log(""); console.log(1); console.log(""); console.log(2) 

は、出力をコピーして貼り付けます。

最も可能性の高いシナリオは二度目でkeyが空の文字列

であるということですが、それはまた、これを試して何も

を印刷しないconsole.log("") を試してみてください任意のテキストエディタ(すなわち、)プレーンテキストとして貼り付け

1 
2 

それは、以下のようになりますコンソールが空行の合図を示していますが、このキューがコピー&ペーストを消えていても、1と2の間には何もありませんでした出力はプレーンテキストとして出力されます。このプロセスはWCHistory.implement(..)への呼び出しによって開始され、このメソッドが呼び出されている場合

UPDATEは

だけでなく、二回、そして明らかに、二回目は、何らかの理由で、キーは空です。

console.log("key: " + key)にこの

変更console.log(key)を試してみてください、あなたはこのようなものが表示されるはずです。何らかの理由で、

key: search-key 
found it 
Object search-key=Object $family=Object 
key: 
whhhat? 
Object search-key=Object $family=Object 
+0

2回通過する場合、「検索キー」が1回だけ出力される方法は説明できません。 –

+0

cannonadeと同じ回答...間違ったbtw、コードが確実に不完全である、つまり検索キーが2回現れる(または未定義または何者か) – eglasius

+0

Daniel、コードが不完全であるため、console.logの仕組みがわかりません検索キーがないので、何も印刷されない可能性があります。 – hasen

1

私は答えはこれが単なるパスではないと思います。

これはコードが2回呼び出されているように見えますが、2回目は空のキーで表示されるようです。おそらく、もっと多くのコードを確認する必要があります。

この仮説を確認するために、if文の前に整数カウントを増やすことができます。

+0

これは私が最初に考えたことですが、 "検索キー"は一度だけ出力されています...空であっても、ログに空白行が吐き出されます。このすべてについての何かが合わない。 :P –

+0

ダニエルと合意して、それは実際にはコード全体ではないようです... – eglasius

+0

nullがログに渡されると、それでも空白行が出力されますか? –

0

詳細を表示する必要があります。これはイベントハンドラ内にありますか?これは何ですか'?? なぜこの質問は「量子」とタグ付けされていますか?

0

は、それが実際には2回呼び出されていますかどうかを確認するためにこれにあなたのコードスニペットを変更するが、 、console.log(key)は2回目に何かを出力していません。

console.log("====="); 
console.log(key); 
if (this.watches.get(key)) { 
    console.log("found it"); 
} else { 
    console.log("whhhat?"); 
} 
console.log(this.watches); 

その後、あなたは出力が得られます:

===== 
search-key 
found it 
Object search-key=Object $family=Object 
===== 
whhhat? 
Object search-key=Object $family=Object 

あなたが出力を取得した場合:

===== 
search-key 
found it 
Object search-key=Object $family=Object 
whhhat? 
Object search-key=Object $family=Object 

を、私は間違っていると私は答えを削除(またはそれ以上だろうおそらく他の人が同じ経路をたどらないようにコミュニティウィキにする)。

関連する問題