1

バグを追跡しているときに、奇妙な動作に遭遇しました。これはなぜですか?

注: 参考までに、このコードは、私の JavaScript コードをクロージャ コンパイラで圧縮した結果です。

クロムでは、スローされたエラーでデバッガーが一時停止します。そして、コンソールにいくつかの行を入力しました (以下を参照)。

a
> null
B.Ta.Cd[a]
> "Override this" error is thrown
B.Ta.Cd[null]
> undefined

aif が thenであると思われる理由がわかりませんnull。なぜ 2 行目で同じ結果が得られないのか。

a興味深いことに、私はどのように とnullが違うのかを見たかったのです。

typeof(a)
> "function"
typeof(null)
> "object"

a今、どうすれば関数とnull?の両方になることができるのだろうと思っています。

このビデオは、コンソールでのテストを示しています

私の修正は、チェックしてtypeof(a) == "function"から返すことでした。しかし、理解できない問題の修正を追加するのは好きではありません。

4

1 に答える 1

1

ScottMermelstein の考え方に基づいて (助けてくれてありがとう)、valueOf関数のa関数が null を返すようにオーバーライドされていたことがわかりました。aしたがって、コンソールの内容を確認しようとすると、かなり誤解を招くことがわかります。

例については、このフィドルを参照してください。

于 2013-11-06T16:41:38.097 に答える