2016-08-30 66 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'。你看到的是一个小时左右的实验结果。 –