代码之家  ›  专栏  ›  技术社区  ›  Student

为什么javascript的typeof总是返回“object”?

  •  15
  • Student  · 技术社区  · 14 年前

    如果它总是回来,它有什么用 object 作为类型?

    元素 .

    7 回复  |  直到 5 年前
        1
  •  22
  •   Spudley Pat    14 年前

    This page 在JS中有一个类型列表,以及从typeof得到的每个类型的响应。它还有一些JS代码,可以用返回更多有用信息的函数重写typeof函数。如果您担心它没有用,如果您愿意,可以实现类似的功能。

        2
  •  8
  •   Pointy    14 年前

    它并不总是返回“object”:

    alert(typeof "hello");
    

    也就是说,检查对象的一个(可能)更有用的技巧是 Object.prototype.toString.call()

    var t = Object.prototype.toString.call(itIsAMystery);
    

    [object Foo] “Foo”是 有趣的部分。对于“本机”类型(如Date或String),可以返回构造函数名称。

        3
  •  5
  •   AutoSponge    14 年前

    为此,我首先检查typeof,然后检查null大小写或“object's”构造函数,如下所示:

    for (o in obj) {
        if (obj.hasOwnProperty(o)) {
            switch (typeof obj[o]) {
                case "object":
                    if (obj[o] === null) {
                        //do somethign with null
                    } else {
                        if (obj[o].constructor.name === "Array") {
                            //do something with an Array
                        } else {
                            //do something with an Object
                        }
                    }
                    break;
                case "function":
                    //do something with a function
                    break;
                default:
                    //do something with strings, booleans, numbers
                    break;
            }
        }
    }
    
        4
  •  3
  •   Tamal Anwar Chowdhury    6 年前

    并非所有typeof都返回对象。

    对象,数组 返回类型 object .

    功能 它是一个对象(引用类型),但返回 function . 这是语言上的矛盾。

    未定义 退货 undefined 无效的 对象

    (不是数字)返回 number .

    你最好记录下所有这些,并注意这些奇怪的行为。

    typeof "Tamal" ---> string
    typeof 100 ---> number
    typeof true ---> boolean
    typeof false ---> boolean
    typeof undefined ---> undefined
    typeof function() {} ---> function
    typeof Symbol() ---> symbol
    typeof {name: "Tamal"} ---> object
    typeof [1, 2, 3] ---> object
    typeof /^/ ---> object
    typeof NaN ---> number
    typeof null ---> object (bug)
    
        5
  •  2
  •   James-Jesse Drinkard    8 年前

    要与其他对象一起添加,typeof同时返回对象和原语。javascript中有5种基本类型:undefined、null、boolean、string和number。一切都是一个对象。当typeof应用于函数以外的任何对象类型时,它只返回object。当应用于函数时,它返回一个函数对象。

    例如:

    • typeof true;//返回基元类型“boolean”
    • typeof null//返回“object”,这是一个错误,但到目前为止,在另一个ECMAScript版本中还没有修复程序,只需讨论一下这样做。
    • typeof object//返回“object”,这很有意义

    为了进一步阐明Pointy的答案,在ECMAScript 5中,每个JavaScript对象都有一个称为[[Class]]的内部属性。为了显示对象的实际值,可以使用以下方法引用[[Class]]属性: Object.prototype.toString

    var dateObject = Object.prototype.toString(new Date);
    document.write(dateObject);//[object Object]
    

    您可以使用调用获取实际的对象类型:

    var dateObject = Object.prototype.toString.call(new Date);
    document.write(dateObject);//[object Date]
    
        6
  •  1
  •   Grant Nyland    11 年前

    检查变量是否存在时(typeof variable!==“undefined”)有时需要首先检查(variable==null),因为typeof为赋值为null的变量返回“object”。

        7
  •  -1
  •   Achilles    14 年前

    您必须了解JavaScript中的类型系统是动态的,有一些“灵长类”类型可供构建。通过将所有复杂对象视为类型“object”,这允许您回避类型并调用方法,而不必知道所传递对象的类型(假设该类型实现了函数调用)。在动态编程语言中,一切都是“对象”。