2011-12-21 57 views
1

對不起,這個簡單的問題。我有這個功能:可以使用相同的函數參數接受不同的數據類型嗎?

function(var1){ 
    var myString =var1; 
    // myString is parsed for integers 
} 

是否需要總是以字符串的形式調用參數?例如

function("23") 

或者我可以安全地混合搭配嗎?例如

function(23); 
function("string with number 23"); 
+1

JavaScript是動態類型...也許時間從一本好書開始? – 2011-12-21 16:27:40

+0

你能告訴我們什麼是功能? – kapa 2011-12-21 16:30:08

+0

@Kerrek:我讀過的最後一個在線指南說要傳遞正確的數據類型。我認爲這只是一種良好的習慣,而不是語言所要求的,這就是你給予的原因。但我需要確保。 – 2011-12-21 16:33:52

回答

1

是的,你可以通過不同的數據類型,如JavaScript是動態類型語言。 如果您想要取決於數據類型的不同行爲,則可以使用instanceof

像這樣:

function f(var1) { 
    if(var1 instanceof String) { 
     // handle strings 
    } else if(var1 instanceof Object) { 
     // handle objects 
    } else if(var1 instanceof Date) { 
     // handle dates 
    } 
} 

這也可以用於過濾/驗證輸入數據。

更新:請注意@ jakeclarkson對instanceoftypeof運營商之間的區別的評論。

+0

謝謝。這是完美的。我打算使用typeOf,但instanceOf看起來更好。 – 2011-12-21 16:43:09

+3

請注意,這不適用於「字符串」文字,例如''一個字符串「instanceof String'將返回'false',而'new String(」string「)instanceof String'將返回'true'。這是一個[示例](http://jsfiddle.net/jakeclarkson/32shh/)。 – jabclab 2011-12-21 16:47:47

+0

+1 to @jakeclarkson。 'instanceof'和'typeof'類似但不一樣。它們的用法取決於項目體系結構和問題的類型。我會在最初的回覆中提到這個評論。 – Minras 2011-12-21 17:01:57

1

您可以將任何您想要的數據類型傳遞給函數。這很重要,你如何使用參數。

+0

非常感謝。我只需要確保 - 因爲並非每個瀏覽器都是一樣的。 – 2011-12-21 16:40:06

1

只要您的整數解析器設置爲與混合使用,就可以進行混合和匹配。

1

如果你希望這個數字是一個整數,並且不要將某些數學運算放在語音標記中,那麼你可以使用這種方法。

如果你傳遞一個數字作爲一個字符串,你可以使用百達

parseInt("string"); 
1

簡短的回答:是

龍答:類型檢查是在JavaScript中一個真正的痛苦。如果開始嘗試區分數組和對象,這隻會變得更加困難。

我會用它可以發現here

然而Crockford的TYPEOF功能,如果你只打算在傳遞字符串或數字本應該做的:

function (var1) { 
    if (typeof var1 === "number"){ 
    //treat it like a number 
    } else if (typeof var1 === "string") { 
    //try to parse it 
    } else { 
    //Its neither a string nor a number 
    } 
} 
相關問題