zoukankan      html  css  js  c++  java
  • 《编写可维护的JavaScript》——JavaScript编码规范(五)

    语句和表达式

    在JavaScript中,诸如if和for之类的语句有两种写法,使用花括号的多行代码或者不使用花括号的单行代码。比如:

    //不好的写法,尽管这是合法的JavaScript代码
    if (condition)
        doSomething();
    
    //不好的写法,尽管这是合法的JavaScript代码
    if (condition)    doSomething();
    
    //不好的写法,尽管这是合法的JavaScript代码
    if (condition) {    doSomething();    }
    
    //好的写法
    if (condition) {
        doSomething();
    }
    

    前两种写法都没有花括号,这在很多编程规范中,都是被禁止的。

    绝大多数JavaScript程序员认可这样一点:不论块语句包含多行代码还是单行代码,都应当总是使用花括号。因为省略花括号会造成一些困惑。

    花括号的对齐方式

    有两种主要的花括号对齐方式:

    第一种风格是将花括号放置在块语句的第一句代码的末尾;

    第二种对齐风格是将花括号放置于块语句首行的下一行。

    Google JavaScript风格指南明确禁止第二种用法,以免导致错误的分号自动插入。个人更推荐第一种花括号对齐格式

    块语句间隔

    块语句首行附近的空白行同样是我们需要考虑的。块语句间隔主要有三种主要的风格:

    第一种风格是,在语句名、圆括号和左花括号之间没有空格间隔。

    if(condition){
        doSomething();
    }
    

    不少程序员喜欢这种风格,因为这种风格看起来很紧凑,而另一些人抱怨这种紧凑风格实际上破坏了一些易读性。Dojo编程风格指南推荐使用这种风格。

    第二种风格是,在括左圆括号之前和右圆括号之后各添加一个空格。

    if (condition) {
        doSomething();
    }
    

    有很多程序员青睐这种风格,因为语句类型和条件判断更易读。这种风格是Crockford的编程规范和Google JavaScript风格指南所推荐的。

    第三种风格是,在左圆括号后和右圆括号前各添加一个空格。

    if ( condition ) {
        doSomething();
    }
    

    jQuery核心风格指南文档规定了这种风格,因为它使语句中的各个部分都非常清晰和易读。

    switch语句

    关于switch语句的格式和使用方式也是众说纷纭。其中一些多样性来自于switch语句的传承,它源自C,但在Java和JavaScript中又没有完全相同的语法。

    尽管语法相似,JavaScript中的switch语句的行为和在其他语言中是不一样的:switch语句中可以使用任意类型值,任何表达式都可合法地用于case从句。但在其他语言中则必须使用原始值和常量。

    缩进

     对于JavaScript程序员来说,switch语句的缩进格式是一个有争议的话题。很多人使用Java风格的switch语句,看起来像下面这样。

    switch(condition) {
        case "first":
            //代码
            break;
    
        case "second":
            //代码
            break;
    
        case "third":
            //代码
            break;
    
        default:
            //代码
    }
    

    这种格式的独特之处在于:

        每条case语句相对于switch关键字都缩进一个层级。

        从第二条case语句开始,每条case语句前后各有一个空行。

    另一种格式如下:

    switch(condition) {
    case "first":
        //代码
        break;
    case "second":
        //代码
        break;
    case "third":
        //代码
        break;
    default:
        //代码
    }
    

    这个选择完全是个人偏好问题

    case语句的连续执行

    “执行完一个case后连续执行(fall through)下一个case”,这是否是一种广为认可的实践,也是备受争议的一个问题。不小心省略case末尾的break是很多bug的罪魁祸首,因此Douglas Crockford 提出所有case都应当以break、return或throw做结尾,但没有给出任何解释。如果某个case执行结束后直接进入下一个case,JSLint会给出警告。

    有很多人认为case的连续执行是一种可接受的编程方法,我很同意这种观点,只要程序逻辑非常清晰即可。但这种情况下最好给出注释。

    default

    switch语句中另一个需要讨论的议题是,是否需要default。很多人认为不论何时都不应该省略default,哪怕default什么也不做。

    也有人更倾向于在没有默认行为且写了注释的情况下省略default。

    with语句

    在严格模式中,with语句是被明确禁止的,如果使用则报语法错误。强烈推荐避免使用with语句。

    for循环

    for循环有两种:一种是传统的for循环,是JavaScript从C和Java中继承而来;另一种是for-in循环,用来遍历对象的属性。这两种循环乍一看很类似,但却有着完全不同的用法。

    传统的for循环往往用于遍历数组成员。

    for-in循环是用来遍历对象属性的。不用定义任何控制条件,循环将会有条不紊地遍历每个对象属性,并返回属性名而不是值。

    for-in循环有一个问题,就是它不仅遍历对象的实例属性(instance property),同样还遍历从原型继承来的属性。出于这个原因,最好使用hasOwnProperty()方法来为for-in循环过滤出实例属性。

    var prop;
    
    for (prop in object) {
        if (object.hasOwnProperty(prop)) {
            console.log("Property name is " + prop);
            console.log("Property  value is "+ object[prop]);
        }
    }
    

    推荐在所有for-in循环中使用hasOwnProperty(),除非你想查找原型链,这时就应当补充注释。

    关于for-in循环,还有一点需要注意,即for-in循环是用来遍历对象的。一个常见的错误用法就是使用for-in循环来遍历数组成员。

    <!--

    作者:纤锐
    出处:http://www.cnblogs.com/beginner2014
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。谢谢合作。

    -->

  • 相关阅读:
    个人网站开发之用户模块
    个人网站开发记录(三)
    第二章 python变量及文件
    第十二章 函数的----
    第十一章 函数的参数
    第十章 函数
    第九章 内存管理
    第八章 文件的处理
    第七章 字符编码
    第六章 数据类型——元组、字典、集合、数据类型的转换
  • 原文地址:https://www.cnblogs.com/beginner2014/p/5420041.html
Copyright © 2011-2022 走看看