2013-01-13 19 views
0

代碼:當所有的警報都顯示出來undefined如何使用在JavaScript陣列的值

var testarray = []; 
var test1 = "ashutosh"; 
var test2 = "ashutosh2"; 

if (test1 != test2) { 
    testarray.push = "ashutosh3"; 
    testarray.push = "ashutosh4"; 
    alert(testarray.length); 
} 

if (testarray.length != 1) { 
    alert(testarray.length); 
    alert(testarray[testarray.length - 1]); 
    alert(testarray[testarray.length - 2]); 
} 

不過。我不知道爲什麼會發生這種情況。

+0

使用瀏覽器控制檯查看錯誤,上面應該拋出錯誤 – charlietfl

+2

@charlietfl:不,它不會。 –

+2

@charlietfl:擴展Felix的評論:您可以分配給數組的'push'屬性。所做的就是在數組實例上創建一個屬性,將其隱藏(隱藏)它從原型繼承的屬性。所以它不會拋出一個錯誤,它不會做OP所需要的。即使OP在訪問數組條目「-1」和「-2」(因爲array.length將爲「0」)結束處的位也沒有問題,所以這些屬性不存在,所以結果查看它們的值是'undefined'。 –

回答

1

push功能,而不是一個性質,所以不是

testarray.push="ashutosh3"; 

testarray.push("ashutosh3"); 

以下是我會更新的代碼,FWIW,但我認爲只有實質性更改正在做push正確和使用>= 2而不是!= 1length c赫克末(否則如果數組是空的,你正在尋找項目-1-2,這將是不確定的):

var testarray = []; 
var test1 = "ashutosh"; 
var test2 = "ashutosh2"; 

if (test1 !== test2) { 
    testarray.push("ashutosh3"); 
    testarray.push("ashutosh4"); 
    alert(testarray.length); 
} 

if(testarray.length >= 2) { 
    alert(testarray.length); 
    alert(testarray[testarray.length-1]); 
    alert(testarray[testarray.length-2]); 
} 
+0

而測試'!(test1 == test2)'會更有意義,因爲'test1!= test2' – andlrc

+0

@NULL:確實。或者至少,99%的時間對我來說。 –

0

T.J.克羅德已經用推回答了這個問題,但我猜你是JavaScript新手,所以這裏有一些我以前知道的有用的技巧。

對於每個循環

而不是寫for循環的一個標準,你可以使用foreach循環。

for(i in testArray){ 
    console.log(i); 
} 

對象

直到哈希表和模塊使自己的外觀JS,我們剩下的使用數組。這是我所知道的製作對象最簡單的方法。

var ArrayUtils = { 
    "print" : function(array) { 
     console.log(array); 
    } 
} 

由於ArrayUtils是一個列表,您可以使用點或括號標記

ArrayUtils["size"] = function(array){ 
    return array.length; 
} 

ArrayUtils.indexOf = function(array, i){ 
    return array[i]; 
} 

高階函數在JavaScript

陣列配備擴展它內置的地圖,減少和過濾功能。這三個函數在編寫優雅的代碼時非常有用。

  1. 地圖,傳遞一個序列中的每個元素到一個函數

    testArray.map(function(i){ console.log(i); }); 
    
  2. 減少,以及降低了陣列成一個單一的值。在這個例子中,我計算所述陣列的總和

    testArray.reduce(function(x,y) { return x+y; }); 
    
  3. 過濾器,因爲你可以猜測從數組中刪除元素。在JS中,。濾波器()返回一個新的數組

    testArray = testArray.filter(function(i) { return (i > 0); }); 
    

我也讀到JS具有迭代器和發電機的支持。它們是強大的迭代工具,值得檢查一下,如果您要在代碼庫中大量使用迭代。我不這樣做,這是我推遲作爲待辦事項。