2016-08-30 62 views
0

試圖檢查某些變量是否包含事物,因爲它們拋出錯誤並在沒有時拋出ajax函數。問題是,只是檢查是否data[2][0]含有一種會導致以下錯誤:檢查未定義的原因未定義的錯誤

Uncaught TypeError: Cannot read property '0' of undefined

我倒是非常不喜歡在前一階段進行檢查。我如何檢查是否定義了data[2][0],而不會導致實際檢查破壞我的js?

代碼:

//ajax^
success: function(data){ 
    var xp = data[0][0]; //Contains a string 
    var yp = data[1][0]; //Contains a string 
    var zp = data[2][0]; //Is not set, fails here 

    if(xp === ''){ //Tried using null & undefined here aswell 
     //Do nothing 
    } else { 
     var one = data[0][0]; 
     var oneH = data[0][1]; 
     var oneS = data[0][2]; 
    } 
    if(yp === ''){ 
     //Do nothing 
    } else { 
     var two = data[1][0]; 
     var twoH = data[1][1]; 
     var twoS = data[1][2]; 
    } 
    if(zp === ''){ 
     //Do nothing 
    } else { 
     var three = data[2][0]; 
     var threeH = data[2][1]; 
     var threeS = data[2][2]; 
    } 
//ajax continues v 

任何幫助將非常感激。

+0

_Uncaught類型錯誤的數組:不能讀取undefined_的屬性'0'意味着data [2]沒有被定義,甚至可能沒有定義'data'。 – putvande

+0

@putvande是的,我知道它沒有定義。 'data [0]'和'data [1]'都被定義,它們每個都包含一個鏈接。這是當他們未定義的網站中斷,這就是爲什麼我需要檢查之前,他們是否使用它們 –

+0

你可以做'var zp = data [2] && data [2] [0] || null;' – putvande

回答

1

我會檢查data[2]是否先存在,然後重新定義zp如果是。

var zp = data[2]; 
if (zp) zp = zp[0]; 
2

您應該檢查變量是否使用typeof不確定,不涉及對''相等性檢查:

if (typeof myVar === 'undefined') 

您還可以檢查變量是否使用Array.isArray(myVar)

+0

在OP的情況下,代碼已經崩潰之前,它'if'... – nnnnnn

+0

@nnnnnn真的,但他們的問題是「檢查未定義的原因未定義的錯誤」,這是因爲他們不正確地檢查'undefined' AFAICT –

+0

我嘗試過'typeof'。你看到的是一個小時左右的實驗結果。 –