为什么javascript的typeof总是返回"对象"?

Tom*_*ito 19 javascript typeof

如果它总是将"对象"作为类型返回,它用于什么?

--update

始终为元素或列表.

Spu*_*ley 21

JS的typeof并不总是返回'object',但它确实返回了人们可能不认为是对象的对象 - 即数组,而且奇怪的是,返回null.

对于数组,这是正确的,因为就JS而言,数组是对象; 他们是一回事.Array只是另一个类,您可以实例化Array类型的对象,但它们仍然被视为对象.

此页面包含JS中的类型列表,以及您从typeof获得的每个类型的响应.它还有一些JS代码来覆盖typeof函数,返回更多有用的信息.如果你担心它没用,你可以实现类似的东西.


Poi*_*nty 7

它并不总是返回"对象":

alert(typeof "hello");
Run Code Online (Sandbox Code Playgroud)

也就是说,检查对象的一个​​(可能)更有用的技巧是使用Object.prototype.toString.call()并查看结果:

var t = Object.prototype.toString.call(itIsAMystery);
Run Code Online (Sandbox Code Playgroud)

这会给你一个字符串,就像[object Foo]"Foo"是构造函数(我认为)这个有趣的部分.对于"本机"类型(如Date或String),您将获得该构造函数名称.


Aut*_*nge 5

根据我的经验,typeof 的主要问题来自区分数组、对象和空值(都返回“对象”)。

为此,我首先检查 typeof,然后检查 null case 或“对象的”构造函数,如下所示:

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;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)


小智 5

并非所有 typeof 都返回对象。

对象、数组RegEx返回object.

函数是一个对象(引用类型),但返回类型function。这就是语言上的不一致。

另外要注意的是,undefined返回,undefinednull返回object,这是 JS 中的一个错误。

NaN(不是数字)返回 的类型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)
Run Code Online (Sandbox Code Playgroud)