为什么IE中的“window.location instanceof Location”为false?

时间:2011-01-07 21:09:38

标签: javascript dom typechecking

我在FF 3.6和IE 8中测试了以下代码。前者警告true,后者警告false。为什么这样,我如何在两个浏览器中完成相同的行为?谢谢!

<!DOCTYPE html>
<html>
    <head>
        <script>
            alert(window.location instanceof Location);
        </script>
    </head>
    <body>
    </body>
</html>

2 个答案:

答案 0 :(得分:1)

编辑:关于您问题的评论,听起来您需要测试DOM元素和Location对象之间的差异。

使用nodeType属性测试DOM元素可能会更好。

if( obj.nodeType ) {
    // it was a DOM element
}

然后,如果找不到nodeType,您可以测试各种属性,只是为了确定它是location对象。

if( obj.nodeType ) {
    // it was a DOM element
} else if( obj.hostname && obj.pathname ) {
    // it was a location object
} else {
    // some ERROR
}

原始回答:

这适用于Chrome,Safari,Firefox:

Object.prototype.toString.call(window.location) == '[object Location]';

尽管如此,我无法在IE中测试。

这是ECMAScript规范Section 8.6.2中提到的用于获取内部[[Class]]属性名称的方法。

答案 1 :(得分:0)

location.constructor == Location

适用于IE和Firefox;在Chrome中不起作用。 (Chrome中没有Location个对象。)但是,只有在运行脚本时从同一窗口测试位置时才会起作用。

你真的想做什么?