2012-01-20 58 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

相关问题