【发布时间】:2013-09-19 15:17:07
【问题描述】:
我在理解 IE8 中 typeof 的机制时遇到了问题。
我在“parent.html”中有以下 JavaScript 代码:
var myNewWindow = window.open('child.html');
myNewWindow.sayhi = function() {
alert('Hi!');
}
在 parent.html 中,我们打开一个 JavaScript 控制台 (F12)。我们测试了类型,看起来是正确的。
typeof myNewWindow.sayhi "function"
但是如果我打开一个控制台并在子窗口中做一些测试,结果会有点奇怪。
typeof this.sayhi "object"
问题是“对象”可以被调用。 this.sayhi() 显示警报。
甚至 underscoreJS 也会感到困惑
_.isFunction(this.sayhi) false
谁能解释一下为什么一个存在于 window(this) 中但在外部窗口中声明的函数不被 IE8 识别为函数,而是被 IE8 识别为对象?
顺便说一句,有人说我应该看看答案: typeof window.close is different for IE
你猜怎么着?它仍然说这个东西是一个对象:
Object.prototype.toString.call(this.sayhi) '[object Object]'
【问题讨论】:
-
因为 IE 总是需要一个痛苦的。
-
在 JavaScript 中,函数是对象,因此以这种方式报告它并没有错。不寻常的是一般的 IE8 :) 虽然之前已经讨论过:stackoverflow.com/questions/12457836/…
-
@SergiuParaschiv 那么为什么每个浏览器甚至 IE8 在查询本地声明的函数时都会返回“函数”?
标签: javascript internet-explorer internet-explorer-8 underscore.js