2013-07-05 65 views

回答

3

Tyepof像不工作它只返回内置的类型。你可以尝试:

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

它会检查所有的方式原型链,看看是否thisthis任何原型类。所以如果OtherType.prototype=Object.create(Class);那么对任何OtherType实例都是如此。是否在< IE9

this instanceof Class 

不工作,但不会检查整个原型链。

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

Here是关于让有更多的细节,并表示许多方面,它可以打破一个变量的类型的答案。

+0

你是对的...我忘了它如何使用... – uzay95

+0

当你试图从不同的窗口,即从iframe检查对象时,instanceof也有隐藏catch。 – Tommi

+0

@Tommi是的,我会添加pavel的链接到我的答案以及因为这是更详细 – HMR

2

因为JavaScript只知道以下几种类型:

未定义 - “未定义”

空 - “对象”

布尔 - “布尔”

数 - “数字”

字符串 - “字符串”

主机o bject(由JS环境提供) - 依赖的实现

功能对象(实现在ECMA-262的条件[[调用]]) - “功能”

E4X XML对象 - “XML”

E4X XMLList对象 - “XML”

任何其他对象 - “对象”

你可以找到更多here

阅读this线程查找如何获取对象名称

1

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" 
0

你可以试试这个问题,以及

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 
+0

'obj === undefined'停止我的脚本尖叫obj是未定义的,所以我不能测试它:-)所以它会值得添加下面的测试: 'console.log(getType(some_undefined_variable)); //应该返回undefined,但不在所有浏览器上 – Greg0ry

相关问题