执行'if statement'会在控制台中产生奇怪的结果

时间:2014-07-02 11:14:21

标签: jquery if-statement global-variables

我正在使用全局变量的存在来做if语句。变量:

 _class = $('a').parent().closest('*[class]')[0].className; 

在这种情况下,没有父母,因此没有课程。我想在控制台中收到这些信息,所以我做了if声明:

if ( _class !== undefined ) {

    console.log('has class');

}else{

    console.log('undefined');

} 

在Chrome检查器中,我收到Uncaught TypeError: Cannot read property 'className' of undefined,而我的if声明没有其他内容。我的问题:我该怎么做才能摆脱错误信息并输出我的if声明?我尝试使用nulllength等等,似乎没有任何效果。

示例:JsFiddle

5 个答案:

答案 0 :(得分:4)

尝试处理该错误,

 _class = $('a').parent().closest('*[class]')[0] || "NOPE";

 if (_class === "NOPE") {
     console.log('undefined');
 } else {
     if (_class.className !== undefined) {
         console.log('has class');
     } else {
         console.log('undefined');
     }
 }

DEMO

答案 1 :(得分:3)

问题在于您的全局任务:代码并没有达到您的if语句。您尝试从空引用派生属性 - 可能是parentclosest调用的结果。您需要检查初始分配。

答案 2 :(得分:3)

在尝试获取className属性之前,您应该检查元素是否存在:

_class = $('a').parent().closest('*[class]').length ? $('a').parent().closest('*[class]')[0].className : undefined; 

答案 3 :(得分:2)

首先检查您是否至少选择了一个元素

   elements = $('a').parent().closest('*[class]');

    if (elements.length > 0) {
       _class = elements[0].className; 
       if ( _class !== undefined ) {
          console.log('has class');
       }else{
          console.log('undefined');
       }
    }
    else {
       console.log('no element found');
    }

答案 4 :(得分:1)

这是因为你试图找到jQuery Object的className。但className - 它是DOM元素的方法,它通常使用简单的javascript方法返回,例如getElementById等。 如果使用jQuery Object,请使用jquery方法,在这种情况下使用methid .attr('class');