JavaScript编程风格--基本的格式化

本文介绍了JavaScript的编码规范,包括缩进层级、语句结尾、行的长度、换行、空行、命名、直接量等内容,旨在帮助开发者编写清晰、一致且易于维护的代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、缩进层级
一个制表符长度(通常一个制表符长度相当于4个字符)的缩进层级,代码的视觉展现是最优的,但由于不同系统对制表符的解释不同,所以如果想代码在所有环境下展现一致的话,可以将我们使用的编辑器配置为敲入Tab键时插入4个空格。

2、语句结尾
JavaScript语句要么独占一行,要么以分号结尾。
虽然能有时候我们能省略分号,但不推荐这样子做,因为省略分号有时会导致一些意想不到的情况,导致维护起来很麻烦,所以我们一定要注意不要省略分号。
下面列举一些例子说说关于分号要注意的点:
1)如果一条语句以“(”、“[”、“/”、“+”或“-”开始,那么它极有可能和前一条语句结合在一起解析(若前一条语句没分号的话)。

var y = x + f
(a+b).toString()

这段代码会被解析为:

var y = x + f(a+b).toString();

但显然代码本意并非如此,所以我们要手动填写行尾的显式分号。

2)如果在return、break和continue这三个关键字后紧跟着换行,那么JavaScript会在换行处填补分号。

return
true;

JavaScript会将其解析为:

return; true;

然而代码的本意是这样的:

return true;

3)“++”和“–”运算符可以作为表达式前缀,也可以当做表达式后缀,但若将其作为表达式后缀时,它和表达式应当在同一行,否则表达式行尾将填补分号。

x
++
y

代码被解析为:x; ++y,而不是:x++; y

3、行的长度
如果一行代码太长而导致编辑窗口出现了横向滚动条,这个还是很不爽的,所以对于一行的长度,建议不要超过80个字符。

4、换行
当一行长度超过了限制的字符数时需要进行手动换行,这里采用的换行规则是:在运算符后换行,然后在下一行增加两个层级的缩进(按照上面说的就是一个缩进层级就是4个字符)。
如:

callAFunction(document,element, window, "some string value", true, 123,
        navigator);

将运算符置于行尾是为了避免JavaScript自动在行尾插入分号。

这个规则有一个例外:就是给变量赋值时,第二行的位置要和赋值运算符的位置对齐,如:

var result = something + anotherThing + yetAnotherThing + somethingElse + 
            anotherSomethingElse;

5、空行
当一段代码语义和另一段代码不相关时可以使用空行将它们分隔。

if (wl && wl.length) {

    for (i = 0, l=wl.length; i < 1; ++i) {
        p = wl[i];
        type = Y.Lang.type(r([p]);

        if (s.hasOwnProperty(p)) {

            if (merge && type == 'object') {
                Y.mix(r[p], s[p]);
            } else if (ov || !(p in r)) {
                r[p] = s[p];
            }
        }
    }
}

以下情况可以考虑添加空行:

在方法之间
在方法中的局部变量和第一条语句之间
在多行或单行注释之前
在方法内的逻辑片段之间插入空行,提高可读性

6、命名
采用小驼峰命名法(首字母小写,后续每个单词首字母大写)来给变量和函数命名。如:

var thisIsMyName;
var anotherVariable;

6.1 变量和函数
变量名前缀应当是名词,函数名前缀应当是动词。如:

var count = 10;
var myName = 'javascript';
var found = true;

function getName() {
    return myName;
}

命名要尽可能短,尽量在变量名中体现出值得数据类型。
如,命名count、length、size表明数据类型为数字,命名name、title、message表明数据类型为字符串。而当个字符命名的变量如i、j、k等则在循环中使用。

对于函数和方法命名来说,第一个单词应该是动词,下面是一些使用动词常见的约定。

can:函数返回一个布尔值
has:函数返回一个布尔值
is:函数返回一个布尔值
get:函数返回一个非布尔值
set:函数用来保存一个值

6.2 常量

为了区分普通变量和常量,通常使用大写字母和下划线来命名常量,下划线用于分隔单词,比如:

var MAX_COUNT = 10;
var URL = 'http://www.nczonline.net/';

if (count < MAX_COUNT) {
    doSomething();
}

其实这里所说的变量和常量只是使用了不同的命名约定的变量,它们的值都是可以被修改的。

6.3 构造函数
构造函数的命名使用大驼峰命名法即首字母大写,后续每个单词首字母大写。此外,构造函数的命名也常常是名词。

7、直接量
7.1 字符串
字符串可以使用单引号或双引号括起来,两种做法在功效上是完全一致的,但我们的代码应当从头到尾只保持一种风格。
对于多行字符串应使用字符串连接符(+)将字符串分成多份,如:

var longString = 'Here is the story,of a man '+
                 'named Brady.';

7.2 数字

//整数
var count = 10;

//小数
var price = 10.0;
var price = 10.00;

//不推荐的小数写法:没有小数部分
var price = 10.;

//不推荐的小数写法:没有整数部分
var price = .1;

//不推荐的写法:八进制写法已被弃用了
var num = 010;

//十六进制写法
var num = 0xA2;

//科学计数法
var num = 1e23;

7.3 null
下列场景应当使用null:

1.用来初始化一个变量,这个变量可能赋值为一个对象
2.用来和一个已经初始化的变量比较,这个变量可以是也可以不是一个对象
3.当函数的参数期望是对象时,用作参数传入
4.当函数的返回值期望是对象时,用作返回值传出

下面的场景则不应当使用null:

1.不要使用null来检测是否传入了某个参数
2.不要用null来检测一个未初始化的变量

7.4 undefined
没有被初始化的变量都有一个初始值,即undefined,表示这个变量等待被赋值。对于undefined需要注意一下几点:
1)null == undefined 的结果为 true。
2)对值为undefined的变量或尚未声明的变量使用typeof运算的结果都是“undefined”,比如:

var person;
console.log(typeof person); //"undefined"
console.log(typeof foo); //"undefined"

这里想说的就是通过禁止使用特殊值 undefined ,可以有效地确保只在一种情况下 typeof 才会返回“undefined”:即变量未声明时。
所以如果我们使用了一个可能(或可能不会)赋值为一个对象的变量时,将其赋值为 null。

//好的做法
var person = null;
console.log(person === null); //true

7.5 对象直接量

创建对象的一种最流行的做法是使用对象直接量,在直接量中直接写出所有属性。

//  不好的写法
var book = new Object();
book.title = "Maintainable JavaScript";
book.author = "Nicholas C. Zakas";

定义对象直接量时,常常在第一行包含左花括号,每一个属性的名值对都独占一行,并保持一个缩进,最后右花括号也独占一行,如:

//  好的写法
var book = {
    title: "Maintainable JavaScript",
    author: "Nicholas C. Zakas"
}

7.6 数组直接量
数组直接量是JavaScript中定义数组最简洁的一种方式,不赞成显式地使用Array构造函数来创建数组,比如:

// 不好的写法
var colors = new Array('red', 'green', 'blue');

可以使用两个方括号将数组初始元素括起来,来代替使用Array构造函数的方式来创建数组。

// 好的写法
var colors = ['red', 'green', 'blue'];

备注:内容摘自《编写可维护的JavaScript》一书。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值