2012-01-20 6 views
4

これは実際には何の意味もありませんが、私が遭遇したこの小さな奇妙なことについて興味があります。このtoString()とthis.toString()はChromeのコンソールで異なる結果を生成するのはなぜですか?

this.toString() 

戻り[object DOMWindow]一方

基本的に、Chromeの開発者コンソールで、この

toString() 

戻り[object Object]、。

私が知っている限り、これはコンソールからのみ発生し、on this jsFiddleと表示されています。 ## javascriptの誰かが、関数がどこから来たのかを説明するthis linkを見つけました。ただし、コンソールの内部または外部で使用された場合の動作の不一致については説明しません。

なぜ、toString()this.toString()がChromeのコンソールで異なる結果になるのですか?最初のもので

+0

' "[オブジェクトウィンドウ" 上に固定されていると思う'の両方のFirebugに返されます。 – Chad

+0

どちらもChrome 16の[object DOMWindow] ''です。 –

+0

@AshBurlaczenkoああ、おそらくどこかに修正されたバグがありました。あなたがそれのいくつかのレポートを見つけることができ、私がそれを受け入れると答えとして投稿することができます。 –

答えて

4

WebKitはコンソールでグローバルコールに間違ったコンテキストを使用していました。

(クロム14):

> this 
DOMWindow 
> this.toString() 
"[object DOMWindow]" 
> toString() 
"[object Object]" 
> valueOf() 
CommandLineAPI 

Iこれはhere

+1

それはたくさんの意味があります。 'valueOf()。toString()'は "[object Object]"を返します。 –

+0

'.valueOf()'の+1 – Raynos

2
  1. は、コンソールは、関数のtoString()が所有していることにより、オブジェクトObject、について説明しますし、そこからすべて継承:して

    toString()

  2. 第2に、これはの機能をthisと実行します。この場合はウィンドウオブジェクトです:

    this.toString()


私はこの答えを-20を得る前に、出力[object Object]に基づいて控除(私はよく分からない)である:私にとって、それは方法がObjectから実行されていることを伝えます。

あなたはFirebugの中で同じことを行う場合は、それが実際にwindowオブジェクトから実行:

enter image description here

私は、コンソールの実装には、この特定の...またはそのChromeのバージョンのバグを推測します。

+2

しかし、私は関数を呼び出しています。実際には、「[object Object]」を含む文字列を返す*です。それはコンソールではありません。 –

+1

機能について何も教えていない – Raynos

+1

私は(1)が正しいとは思わない。 – Pointy

3

Live exampleは、ほとんどが"[object Window]"であることを示しています。このバグは、主にコンソールに当てはまります。 Object.prototype.toString.call(window)はまだあなたは未定義の動作の袋を発見したグローバル

var s = toString; 

console.log(s()); // "[object global]" 
console.log(toString()); // "[object Object]" 
console.log(window.toString()); // "[object Window]" 

(function() { 
    var s = toString; 
    console.log(s()); // "[object Undefined]" 
})(); 

(function() { 
    var s = window.toString; 
    console.log(s()); // "[object Window]" 
})(); 

console.log(Object.prototype.toString.call(window)); // "[object global]" 

console.log(window.toString.call(window)); // "[object DOMWindow]" 

を返すことに注意してください。私はあなたが逃げることをお勧めします。

これは、グローバルコンテキストとウィンドウオブジェクトがおそらく同じものではない(大きなヒントは[オブジェクトグローバル])ということで説明できます。

なお、this === windowは5例すべてに注意してください。

は非常に多くのことを説明しています。window.toStringは特別な(ただし異なる)機能です

+0

これはほとんど答えではありませんが、あなたの評価に同意します。 –

+0

+1もう少し説明できますか? – qwertymk

関連する問題