2012-06-11 79 views
2

我需要一個可以容納不同的對象類型的數組,並認爲我會需要使用某種形式的繼承,但後來意識到它的工作原理已經默認在Javascript:有不同物體的陣列好嗎?

var someArray = []; 

someArray.push("Hello World"); 
someArray.push(12); 
someArray.push(false); 

alert(someArray.pop()); 
alert(someArray.pop()); 
alert(someArray.pop()); 

似乎在的jsfiddle工作。這可能是一個愚蠢的問題,但是做這樣的事情有什麼問題嗎?在我的C,C++,C#,VB .NET等背景中,數組需要是單一類型的,所以這種事情對我來說似乎很神奇。這樣的事情可以做還是隻會導致錯誤和拉毛?

+0

實際上,你可以對C#的''ArrayList'做同樣的事情,它不是強類型的。 – gdoron

回答

4

數組不是強在JavaScript類型的,所以沒有問題......

2

JavaScript是一種動態語言,它的陣列不是強類型的,所以它的罰款。
那麼,這是否:

var x = 12;  // Number 
    x = "12"; // String 
    x = {};  // Object 
    x = [];  // Array. 
    ... 

每個變量可以容納所有類型的對象,這不只是對數組...
當您使用typeof運營商,如:

if (typeof x === "string") 

你」不要「查詢」x變量類型,而是它保存的值。

  • C#, java, c++ ...:必須聲明變量數據類型(靜態類型)。
  • Javascript:變量數據類型未聲明(動態類型)。
+0

另一種說法是:由於你從來沒有真正用JS聲明變量的類型,所以解釋者甚至不知道數組應該和不應該在哪裏?沒有類型聲明;沒有類型執法。 – Flambino

+0

@Flambino。這並不總是正確的,谷歌.NET' var'。或者讀一下:_「var。一個隱式類型的局部變量是強類型的,就像你自己聲明瞭類型一樣,但是編譯器決定了類型。」# – gdoron

+0

@Flambino:我只是覺得它會根據插入第一個對象。 –