繁体   English   中英

为什么javascript typeof总是返回“对象”

[英]Why javascript typeof returns always “object”

我哪里做错了?

我会等待“Class”作为此代码的结果,但它不会:

在此输入图像描述

这是来自对象功能:

在此输入图像描述

Tyepof不会那样工作,它只返回内置类型。 你可以尝试:

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

它会检查所有的方式原型链,看看this或任何原型的this是1类。 所以如果OtherType.prototype=Object.create(Class); 那么任何OtherType实例都是如此。 不适用于<IE9

要么

this instanceof Class

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

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

是一个关于获取具有更多细节的变量类型的答案,并展示了它可以破解的许多方法。

因为JavaScript只知道以下类型:

未定义 - “未定义”

空 - “对象”

布尔 - “布尔”

号码 - “号码”

字符串 - “字符串”

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

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

E4X XML对象 - “xml”

E4X XMLList对象 - “xml”

任何其他对象 - “对象”

你可以在这里找到更多

阅读主题以了解如何获取对象名称

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"

你也可以尝试一下

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();
}

这里的一个例子。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM