一千萬個為什麽

搜索

Javascript:typeof和instanceof結果是否矛盾?

在對象上執行typeof和instanceof時,我看到了相互矛盾的結果。

我有以下測試頁面:

<html>
    <body>
        
        <script type="text/javascript">
            var foo = document.getElementById("test");
            console.log(typeof foo);//returns "function"
            console.log(foo instanceof Function);//returns false
            console.log(foo instanceof Object);//returns true
        </script>
    </body>
</html>

“typeof foo”正在返回“功能”但是 “foo instanceof Function”返回false。

這對我來說沒有意義。對象如何將類型設為函數但不是函數的實例?此外,我希望“typeof foo”返回“對象”。

最佳答案

重要的事實是DOM元素(例如,使用 document.getElementById()獲得)不是本機JavaScript對象。相反,它們是主機對象。因此,它們不受適用於本機JavaScript對象的通常規則的約束,並且它們的行為(非常合理地)將從一個瀏覽器到下一個瀏覽器變化很大。

簡而言之,所有賭註都已關閉。不要依賴於其記錄的API之外的宿主對象的行為。

相關參考:

轉載註明原文: Javascript:typeof和instanceof結果是否矛盾?