美元符号蓝调:JavaScript和PHP


18

我从小就对C ++和Java进行编程,那里的一切都是安全而美丽的。编译器一定要检查我是否流浪。当然,每个人在大学里都做了一点Perl,但我没有吸气。这些天的孩子们全都在后端使用PHP,而在前端则使用Javascript。在尝试时髦时,我也这样做(用于Web开发)。我一直遇到的问题是,我不小心在Javascript的常规变量前添加了美元符号($),当然没有人说什么,因为这是jQuery对象经常使用的合法语法。

是否有任何调试工具或开发技巧来捕捉这种美元符号的混乱?您是否经常犯同样的错误,如何从情感上处理错误?Chrome开发者工具并不总是会看到这是Javascript错误。我使用PhpStorm和Emacs进行开发,但是这些并没有引起我的愚蠢,尽管我怀疑Emacs确实可以,但是选择不告诉我有关情况。

如果您认为这个问题很荒谬,我认为您是对的。但是我们生活在一个变量前面有美元符号的世界。在这样的世界里,没有什么是荒谬的。


2
感情上?只是抨击你的同事。
克里斯·希夫豪尔

@ChrisSchiffhauer不幸的是,我在学术界工作,而彻底和完全孤立是游戏的名称。我必须安排一次与同事开会才能持续下去,这将消除所有这些问题的自发性。
艾伦·图灵

Answers:


11

使用$in变量没有错。我不会对每个变量故意这样做,但这仍然是有效的语法。jQuery是$用作变量名的示例之一。这就是为什么“ Chrome开发人员工具并不总是看到这是Javascript错误”的原因,因为首先没有错误。

如果您害怕编写如下代码:

var demo = function demo() {
    var a = 123;
    ...
    $a = 456; // A new variable is created in global scope.
}

那么您必须使用样式检查器,例如jsLintjsHintGoogle Closure Linter。其中哪一个?由您决定。为了帮助您,请注意以下几点:

样式

Google Closure Linter遵循Google JavaScript样式指南(众所周知)。对JavaScript或其他六种语言使用众所周知的样式是个好主意:当您共享代码或雇用新的开发人员时,他们很可能已经熟悉这种样式。

许多开发人员也对Douglas Crockford风格很熟悉。这种风格在JavaScript:The Good Parts中有详细解释,这本值得任何使用JavaScript的人都可以购买的书。

至于jsHint,我真的找不到使用的约定,并且网站本身似乎避免谈论该主题。也许我错过了一些东西。

IDE支持

PhpStorm 支持 jsLint和jsHint 。这也是这种情况谷歌关闭短绒的。

环境

Google Closure Linter是一系列工具之一。如果您已经在使用Google Closure编译器Google Closure库,则最好在其他工具之上选择Closure Linter。

严格

众所周知jsLint是严格的。jsHint更为宽松,这并不总是一件好事。例如,在一篇文章中解释了 jsLint替换为jsHint的原因之一,该文章显示了错误的代码,这会在jsLint中产生错误,但在jsHint中不会产生错误:

/*global jQuery */

// Example taken from jQuery 1.4.2 source
jQuery.extend({
    /* ... */

    isEmptyObject: function( obj ) {
        for ( var name in obj ) {
            return false;
        }
        return true;
    }

    /* ... */
});

代码很糟糕,因为看起来JavaScript具有块作用域,而没有。请参见第49页的JavaScript:优质零件。102,附录A:糟糕的部分,范围。换句话说,在不了解语言的情况下查看代码,我们希望name在循环外不可见,而仍将保持可见。

至于Google Closure Linter,我相信它位于jsLint和jsHint之间的中间位置,但是我没有足够的信息来支持它。

结论

我会避免使用jsHint:它太宽松了,这意味着它不会发现其他linters会检测到的潜在错误。很难找到所使用的样式指南。

在jsLint和Google Closure Linter中,选择并不明显。两者都是由专家编写的,都遵循严格的,精心描述的样式指南,成千上万的开发人员已经遵循。两者都使用一段时间,然后选择一个更适合您的方式。


+1:击败我。当我将语言从F#切换到C#时,我开始删除分号,这样我就可以分担您的痛苦了;)
scrwtp

2
请注意,由于OP使用的是PhpStorm:JSLint和JSHint都是集成的,可以设置为按需甚至即时检查其代码。您的示例中的错误很容易发现。
yannis 2013年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.