【问题标题】:JSLint mixed spaces and tabs errorJSLint 混合空格和制表符错误
【发布时间】:2011-03-28 07:17:48
【问题描述】:

我通过 JSLint 运行了以下内容:

$(document).ready(function() {

    /*
        Add paragraph on page load
    */

    // Get all header elements
    var header = document.getElementsByTagName('h1'),
        parent,
        newP,
        text;

    // Loop through the elements
    for (var i=0, m = header.length; i < m; i++) {
        parent = header[i].parentNode;
        newP = document.createElement("p");
        text = document.createTextNode('This paragraph was inserted with JavaScript!');
        newP.appendChild(text);
        // Insert the new P element after the header element in its parent node
        parent.insertBefore(newP, header[i].nextSibling);   
    }

    // so much easier with jQuery!
    //$('.section > h1').after('<p>I am a new paragraph &amp; I have been added to the page with javascript!</p>');

    /*
        Toggle show/hide
    */

    // display show/hide link - hidden by default if JS disabled as functionality is not available
    $('#content > .section > h2 > a').removeClass('hide');

    // hide What's new on page load - all content will be available if JS disabled  
    $('#content > .section > ul').addClass('hide');

    // show/hide content on click event
    $('#content > .section > h2 > a').live('click',function() {

        $('#content > .section > ul').toggle();

        return false;

    });

    /*
        JSON
    */

    var $jsonURL = 'scripts/response.json';

    $.ajax({
        type: 'GET',
        url: $jsonURL,
        dataType: "json",
        success: function(data){

            $.each(data.data, function(i, data){

                var $html = '';

                var $string = '';

                if (data.type == 'comment') {
                    $string = 'file';
                } else {
                    $string = 'workspace';
                }

                $html += '<li class="' + data.type + '">';

                $html += '<strong>New ' + data.type + '</strong> was added to the ' + $string + ' ';

                $html += '<a href="' + data.target + '">' + data.target + '</a> ';

                $html += '<a href="' + data.workspace + '">' + data.workspace + '</a>';

                $html += ' by <a href="#">' + data.user + '</a>'; 

                $html += '</li>';   

                $('#content > .section > ul').append($html);    

            });

        },
        error:function (xhr, ajaxOptions, thrownError){
            alert(xhr.status);
            alert(thrownError);
        }           
    }); 

});

我得到了这个错误:

Error:

Problem at line 89 character 4: Mixed spaces and tabs.

}

Implied global: $ 1,31,34,37,39,51,57,81, document 1,8,16,17, alert 87,88

不确定如何解决?

【问题讨论】:

    标签: javascript jquery jslint


    【解决方案1】:

    当您的缩进同时使用空格和制表符时会出现此错误,例如{SPACE}{SPACE}{TAB}{SPACE}{TAB}{SPACE}{TAB}。我不太确定为什么这是一个错误而不是警告,但解决方案是重新访问该行并确保您只使用空格或制表符。

    混合制表符和空格的问题是在不同的应用程序中查看文件时可能会遇到缩进问题。例如,一个用户可能将制表符配置为等于两个空格,另一个用户可能会打开第一个用户的文件并看到不均匀的缩进,因为两个空格加一个制表符等于 6 个空格,而不是第一个应用程序中的 4 个。使用其中一种可确保您的代码具有更好的可读性。

    有趣的是,Stack Overflow 将制表符标准化为 4 个空格,因此将代码从此处复制并粘贴回 JSLint 可以解决问题。

    【讨论】:

    • 或者只是对标签执行“搜索和替换” -> 空格
    • @vsync:是的,但是复制和粘贴到 SO 的 WMD 是实现相同目标的更精细的方法。因此,我强烈建议您这样做。
    • 谢谢你。你知道如何在 JSLint 中定义错误忽略区域吗?
    • 但解决方案是重新访问该行并确保您只使用空格或制表符,对于具有许多源文件和行有该问题的项目来说,这是一个不切实际的解决方案
    【解决方案2】:

    您也可以考虑使用 JSHint 中提供的“smarttabs”选项(JSHint 是 JSLint 的替代品,更好)。

    这篇文章非常有见地,客观地解释了制表符与空格之间的权衡(我没有意识到关于这个主题甚至可以说这么多),并演示了智能制表符逻辑应该如何表现:

    http://www.emacswiki.org/emacs/SmartTabs

    基本上,如果您使用制表符进行“缩进”,则可以使用空格进行“对齐”,只要任何空格“仅用于对齐”,即它们前面有正确数量的缩进制表符:

    这使得这段代码 sn-p 合法(“---->”代表一个 TAB):

    function foo() {
    ---->var a = 4,
    ---->    b = 5,
    ---->    c = 6;
    }
    

    您可以使用名为 '.jshintrc' 的文件来执行此操作:

    {
        "smarttabs": true
    }
    

    或者你可以在源代码中设置注释:

    /*jslint smarttabs:true */
    

    或者你可以完全放弃标签...(随之而来的宗教战争)。

    就个人而言,我使用 JSHint,它是 JSLint 的衍生项目,可以说具有更多的可配置性等。对于大多数目的,它们是相同的工具。 http://jshint.com/docs/#options。我会推荐它。大多数选项在这两种工具之间是通用的。

    我也不使用标签。曾经。如果可以选择,我是两个空格的人。

    【讨论】:

    • 请注意,smarttabs 选项仅存在于 JSHint 中,不存在 JSLint(JSHint 派生自)。
    猜你喜欢
    • 2019-02-15
    • 2012-05-04
    • 2011-04-04
    • 1970-01-01
    • 2023-03-30
    • 2019-12-12
    • 1970-01-01
    • 2012-04-17
    • 1970-01-01
    相关资源
    最近更新 更多