是否有“......超出范围”。 KSLint中的错误导致'[1]为空或不是对象'错误?

时间:2012-09-14 13:31:44

标签: javascript

我正在尝试使用JavaScript填充下拉列表,并在IE8中收到以下错误:

消息:'1'为null或不是对象 行:59 查尔:3 代码:0

当我通过调试器推送代码时(在本例中为JSBin),我在代码中看到以下错误:

第59行:var $ selected_view = $('#ai1ec-view-'+ matches [1]); ---'匹配'超出了范围。

JSBin中的此错误是否与IE8中的错误相关?当代码在Chrome,FF或IE9上运行时,错误不会填充。

以下是相关代码的片段。

// Make current view actively selected in view dropdown button.
    var classes = $('body').attr( 'class' ).split( ' ' );
    for ( i in classes ) {
        // Extract current view from the body class.
        var matches = /ai1ec-action-([\w]+)/.exec( classes[i] );
        if ( matches != null ) break;
    }
    // Get the dropdown menu link of the active view.
    var $selected_view = $( '#ai1ec-view-' + matches[1] );
    // Replace contents of dropdown button with menu link, plus the caret.
    $( '#ai1ec-current-view' )
        .contents()
            .remove()
            .end()
        .prepend( $selected_view.contents().clone() )
        .append( '<span class="caret"></span>' );
    // Deactivate all dropdown menu items.
    $( '#ai1ec-view-dropdown .dropdown-menu li' ).removeClass( 'active' );
    // Activate only currently selected dropdown menu item.
    $selected_view.parent().addClass( 'active' );

1 个答案:

答案 0 :(得分:0)

没有。超出范围的linter提示/错误/消息可能是因为变量是在for-in-loop的body-block中声明的;这应该有效。

然而,matches似乎是null - 导致异常。一旦matches不为空,你就会打破循环,但这并不能保证某些东西真正匹配 - 循环可能刚刚结束,matches仍为空。

BTW:你不应该使用for-in-loop来枚举split返回的数组的属性,你想用正常的for循环迭代这些项。