5.switch 贯穿 switch结构中的case语句,默认是顺序执行,除非遇到break,return和throw。有的程序员喜欢利用这个特点,比如 复制代码 代码如下: switch(n) { case 1: case 2: break; }
这样写容易出错,而且难以发现。因此建议避免switch贯穿,凡是有case的地方,一律加上break。 复制代码 代码如下: switch(n) { case 1: break; case 2: break; }
6.单行的块结构 if、while、do和for,都是块结构语句,但是也可以接受单行命令。比如 if (ok) t = true; 甚至写成 if (ok) t = true; 这样不利于阅读代码,而且将来添加语句时非常容易出错。建议不管是否只有一行命令,都一律加上大括号。 if (ok){ t = true; }
9.function语句 在Javascript中定义一个函数,有两种写法: function foo() { } 和 var foo = function () { } 两种写法完全等价。但是在解析的时候,前一种写法会被解析器自动提升到代码的头部,因此违背了函数应该先定义后使用的要求,所以建议定义函数时,全部采用后一种写法。
10.基本数据类型的包装对象 Javascript的基本数据类型包括字符串、数字、布尔值,它们都有对应的包装对象String、Number和Boolean。所以,有人会这样定义相关值: 复制代码 代码如下: new String("Hello World"); new Number(2000); new Boolean(false);
11.new语句 Javascript是世界上第一个被大量使用的支持Lambda函数的语言,本质上属于与Lisp同类的函数式编程语言。但是当前世界,90%以上的程序员都是使用面向对象编程。为了靠近主流,Javascript做出了妥协,采纳了类的概念,允许根据类生成对象。 类是这样定义的: 复制代码 代码如下: var Cat = function (name) { this.name = name; this.saying = "meow" ; }
然后,再生成一个对象 var myCat = new Cat("mimi"); 这种利用函数生成类、利用new生成对象的语法,其实非常奇怪,一点都不符合直觉。而且,使用的时候,很容易忘记加上new,就会变成执行函数,然后莫名其妙多出几个全局变量。所以,建议不要这样创建对象,而采用一种变通方法。 Douglas Crockford给出了一个函数: 复制代码 代码如下: Object.beget = function (o) { var F = function (o) {}; F.prototype = o ; return new F; };
创建对象时就利用这个函数,对原型对象进行操作: 复制代码 代码如下: var Cat = { name:"", saying:"meow" }; var myCat = Object.beget(Cat);