2015-05-09 49 views
1

是否有一種鍵入JavaScript變量的機制,因此可以確定由賦值返回的數據類型?由於JavaScript是一種動態語言,這是不可能的?JavaScript變量可以輸入嗎?

+0

您可以使用TypeScript,它是JavaScript的超集,可以將其轉換爲JavaScript。請參閱:http://www.typescriptlang.org/有一種感覺,因爲Angular 2將會使用它,所以現在會更多地使用它。 –

+0

可能的重複[如何在JavaScript中獲取對象類型的名稱?](http://stackoverflow.com/questions/332422/how-do-i-get-the-name-of-an-objects-型中的JavaScript) – Markus

回答

2

的JavaScript變量可以容納多種數據類型:數字,字符串,數組,對象

我們可以找出使用typeof一個變量的類型。

if(typeof myvar === 'number') { 
    // code you want 
} 

,或者您可以使用Object.prototype.toString所以你不會有識別對象之間的差異&原始類型

> Object.prototype.toString.call(80) 
"[object Number]" 
> Object.prototype.toString.call("samouray") 
"[object String]" 

希望這是有幫助的。

0

您可以使用預編譯器在開發時添加類型(和其他功能),例如,打字稿:

class Greeter { 
    greeting: string; 

    constructor(message: string) { 
     this.greeting = message; 
    } 

    greet() { 
     return "Hello, " + this.greeting; 
    } 
} 

var greeter : Greeter = new Greeter("world"); 

打字稿是一個超集的JavaScript(這意味着你可以使用現有的JavaScript代碼是和它傳遞給打字稿編譯器)和開發,以提供與類型安全的開發者,繼承簡單等。編譯爲普通的JavaScript。

要獲得第一印象,您可以play with the compiler第一次體驗。

在運行時

得到實際的類型,因爲打字稿編譯成普通的JavaScript一個不能使用typeof得到的打字稿聲明類型的名稱(這將返回例如對象上面定義的迎賓)。要解決這個問題,像下面的JavaScript方法是必需的:

function getClassName(obj) { 
    var funcNameRegex = /function (.{1,})\(/; 
    var results = (funcNameRegex).exec(obj["constructor"].toString()); 
    return (results && results.length > 1) ? results[1] : ""; 
} 

欲瞭解更多信息,請參閱How do I get the name of an object's type in JavaScript?,我發現上面的代碼片段。

相關問題