JS语法系列(九)—— JS编程风格

所谓“编程风格”,指的是编写代码的样式规则。

程序员固然可以自由选择编程风格,但是好的编程风格有助于写出质量更高、错误更少、更易于维护的程序。

所以,”编程风格”的选择不应该基于个人爱好、熟悉程度、打字量等因素,而要考虑如何尽量使代码清晰易读、减少出错。你选择的,不是你喜欢的风格,而是一种能够清晰表达你的意图的风格。这一点,对于JS这种语法自由度很高的语言尤其重要。

一、缩进


空格和Tab键,都可以产生缩进效果(indent)。

Tab键可以节省击键次数,但不同的文本编辑器对Tab的显示不尽相同,有的显示四个空格,有的显示两个空格,所以有人觉得,空格键可以使得显示效果更统一。

无论你选择哪一种方法,都是可以接受的,要做的就是始终坚持这一种选择。不要一会使用Tab键,一会使用空格键。

二、区块


如果循环和判断的代码体只有一行,JS允许该区块省略大括号。
但是这样容易造成错误,建议总是使用大括号表示区块。

表示区块起首的大括号,不要另起一行。因为JS会自动添加句末的分号,导致一些难以察觉的错误。

return
{ 
    key: value
};
// 相当于
return;
{ 
    key: value
};

三、圆括号


圆括号在JS中有两种作用,一种表示函数的调用,一种表示表达式的组合。

// 圆括号表示函数的调用
console.log('abc');

// 圆括号表示表达式的组合
(1 + 2) * 3

我们可以用空格,区分这两种不同的括号。

1、表示函数调用时,函数名名与左括号之间没有空格。
2、表示函数定义时,函数名与左括号之间没有空格。
3、其他情况时,前面位置的语法元素与左括号之间,都有一个空格。

四、行尾的分号


分号表示一条语句的结束。JS规定,行尾的分号可以省略。事实上,确实有一些开发者行尾从来不写分号。但是,强烈建议还是不要省略这个分号。

4.1、不需要使用分号的情况

有一些语法结构不需要在语句的结尾添加分号,主要是以下三种情况。
(1)for和while循环

for ( ; ; ) {
} // 没有分号

while (true) {
} // 没有分号

需要注意的是do...while循环是有分号的。

do { 
    a--;
} while(a > 0); // 分号不能省略

(2)分支语句:if,switch,try

if (true) {
} // 没有分号

switch () {
} // 没有分号

try {
} catch {
} // 没有分号

(3)函数的声明语句

function f() {
} // 没有分号

但是函数表达式仍然要使用分号。

var f = function f() {};

以上三种情况,如果使用了分号,并不会出错。因为,解释引擎会把这个分号解释为空语句。

4.1、其它情况一律要写上分号,不要让JS引擎去猜测

五、全局变量


JS最大的语法缺点,可能就是全局变量对于任何一个代码块,都是可读可写。这对代码的模块化和重复使用,非常不利。

因此,尽量避免使用全局变量。

六、变量声明


JS会自动将变量声明”提升”到代码块的头部。

为了避免可能出现的问题,最好把变量声明都放在代码块的头部。

所有函数都应该在使用之前定义,函数内部的变量声明,都应该放在函数的头部。

七、new命令


JS使用new命令,从构造函数生成一个新对象。

var o = new myObject();

上面这种做法的问题是,一旦你忘了加上newmyObject()内部的this关键字就会指向全局对象,导致所有绑定在this上面的变量,都变成全局变量。

因此,建议使用Object.create()命令,替代new命令。如果不得不使用new,为了防止出错,最好在视觉上把构造函数与其他函数区分开来。比如,构造函数的函数名,采用首字母大写,其他函数名一律首字母小写。

八、with语句


不要使用with语句。

九、相等和严格相等


JS中有两个表示“相等”的运算符:“相等”和“严格相等”。

因为“相等”运算符会自动转换变量类型,造成很多意想不到的情况。因此,不要使用“相等”(==)运算符,只使用“严格相等”(===)运算符。

十、语句的合并


有些程序员追求简洁,喜欢合并不同目的的语句。比如,原来的语句是

a = b;
if (a) { // ...}

他喜欢写成下面这样。

if (a = b) { // ...}  //赋值永远都会成功

虽然语句少了一行,但是可读性大打折扣,而且会造成误读,让别人误解这行代码的意思是下面这样。

if (a === b){ // ...}

建议不要将不同目的的语句,合并成一行。

十一、自增和自减运算符


自增(++)和自减(--)运算符,放在变量的前面或后面,返回的值不一样,很容易发生错误。事实上,所有的++运算符都可以用+= 1代替。

十二、switch...case结构


switch...case结构要求,在每一个case的最后一行必须是break语句,否则会接着运行下一个case。这样不仅容易忘记,还会造成代码的冗长。

而且,switch...case不使用大括号,不利于代码形式的统一。

建议避免使用switch...case结构,用对象结构代替。

(本系列完结)

你可能感兴趣的:(JS语法系列(九)—— JS编程风格)