【问题标题】:Why javascript typeof returns always "object"为什么javascript typeof总是返回“对象”
【发布时间】:2013-07-03 06:26:58
【问题描述】:

我哪里做错了?

由于这段代码,我会等待“Class”,但它不会:

这是来自对象函数:

【问题讨论】:

    标签: javascript typeof


    【解决方案1】:

    Tyepof 不是这样工作的,它只返回内置类型。你可以试试:

    this.constructor.name==="Class";
    

    它会一直检查原型链以查看thisthis 的任何原型是否是Class。因此,如果 OtherType.prototype=Object.create(Class); 则适用于任何 OtherType 实例。不适用于

    this instanceof Class
    

    但这不会检查整个原型链。

    Here是typeof可以返回的返回值列表

    Here 是关于获取变量类型的答案,该变量具有更多细节并显示了它可以破坏的多种方式。

    【讨论】:

    • 当您尝试从不同窗口(即 iframe)检查对象时,instanceof 也隐藏了捕获。
    • @Tommi 是的,我也会将 pavel 的链接添加到我的答案中,因为它更详细
    【解决方案2】:

    因为 JavaScript 只知道以下类型:

    未定义 - “未定义”

    空 - “对象”

    布尔 - “布尔”

    数字 - “数字”

    字符串 - “字符串”

    宿主对象(由 JS 环境提供)- 依赖于实现

    函数对象(在 ECMA-262 术语中实现 [[Call]])-“函数”

    E4X XML 对象 - “xml”

    E4X XMLList 对象 - “xml”

    任何其他对象 - “对象”

    你可以找到更多here

    阅读this 线程以了解如何获取对象名称

    【讨论】:

      【解决方案3】:

      object.constructor.name 将返回构造函数的名称。这是一个例子:

      function SomeClass() {
          /* code */
      }
      var obj = new SomeClass();
      // obj.constructor.name == "SomeClass"
      

      请注意,您需要使用命名函数,如果您将匿名函数分配给变量,它将是一个空字符串...

      var SomeClass = function () {
          /* code */
      };
      var obj = new SomeClass();
      // obj.constructor.name == ""
      

      但你可以同时使用,然后会返回命名函数的名称

      var SomeClassCtor = function SomeClass() {
          /* code */
      };
      var obj = new SomeClassCtor();
      // obj.constructor.name == "SomeClass"
      

      【讨论】:

        【解决方案4】:

        你也可以试试这个

        function getType(obj){
            if (obj === undefined) { return 'undefined'; }
            if (obj === null) { return 'null'; }
            return obj.constructor.name || Object.prototype.toString.call(obj).split(' ').pop().split(']').shift().toLowerCase();
        }
        

        An Example Here.

        function MyClass(){}
        console.log(getType(new MyClass)); // MyClass
        console.log(getType([])); // Array
        console.log(getType({})); // Object
        console.log(getType(new Array)); // Array
        console.log(getType(new Object)); // Object
        console.log(getType(new Date)); // Date
        console.log(getType(new Error));  // Error
        

        【讨论】:

        • obj === undefined 停止我的脚本尖叫 obj 未定义,因此我无法对其进行测试 :-) 所以值得在您的测试中添加以下内容:console.log(getType(some_undefined_variable)); // should return undefined but does not on all browsers
        猜你喜欢
        • 2011-04-16
        • 2011-09-27
        • 1970-01-01
        • 2015-01-18
        • 2011-05-22
        • 1970-01-01
        • 1970-01-01
        • 2020-06-05
        • 1970-01-01
        相关资源
        最近更新 更多