2012-01-20 61 views
4

現在這完全沒有實際意義,但我很好奇我偶然發現的這個小怪癖。爲什麼toString()和this.toString()在Chrome的控制檯中產生不同的結果?

基本上,在Chrome的開發者控制檯,這

toString() 

回報[object Object],而這

this.toString() 

回報[object DOMWindow]

據我所知,這只是從控制檯情況,可以看出on this jsFiddle。有人在## javascript找到了this link解釋函數來自哪裏。但是,它並不能解釋在控制檯內部或外部使用時的行爲差異。

那麼,爲什麼toString()this.toString()產生Chrome的控制檯不同的結果?

+0

' 「[對象窗口]」'返回兩個在螢火蟲。 – Chad

+0

這兩個都是在Chrome 16中的''[object DOMWindow]「''。 –

+0

@AshBurlaczenko啊,所以也許在某處修正了一個bug。如果你能找到它的一些報告併發布爲答案,我會接受它。 –

回答

4

WebKit恰巧在控制檯中使用錯誤的上下文進行全局調用。

(鉻14):

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

我認爲這已被固定在here

+1

這會很有意義。 'valueOf()。toString()'返回「[object Object]」。 –

+0

用於'.valueOf()' – Raynos

2
  1. 與第一個,控制檯告訴你對象Object,通過該功能的toString()是擁有和它的一切繼承

    toString()

  2. 隨着第二,它執行.toString()功能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

相關問題