2013-07-05 66 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

相關問題