2016-08-30 20 views
0

変数に何かが含まれているかどうかを確認しようとしています。なぜなら、エラーを投げ、そうでないときにajax関数を壊すからです。問題は、単にdata[2][0]が何かが含まれているかどうかをチェックすると、次のエラーを引き起こすことがある:未定義をチェックすると、未定義のエラーが発生します

Uncaught TypeError: Cannot read property '0' of undefined

は、私は非常には、前の段階でこれをチェックしないことを好むだろう。実際にjsを破壊することなく、data[2][0]が定義されているかどうかを確認するにはどうすればよいですか?

コード:

//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はTypeErrorを使用してアレイである場合にも確認することができます: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真実ですが、質問は「未定義の原因は未定義のエラーです」というものです。 AFAICT –

+0

私は 'typeof'を試しました。あなたが見ているのは、1時間ほどの実験の結果です。 –

関連する問題