(摘录) 《Javascript 24条最佳实践》

自己一直偏向于实用主义,不是学院派,不是学究派,只讲究把东西能够很好的做出来,但经过一段时间的开发工作当自己总结出来一些东西时,觉得挺有收获,但岂知已早有很多前人早都写的更完美,总结的更好;所以咱们做开发的,务必要统筹好实践与理论、自研与拿来的关系。理论与实践的关系,咱们从小的毛邓都有学习,只是细化下来,到咱们开发人员身上该如何做的问题。我主张在做项目中发现自身技术点的不足,而后抽出时间吃透理论,第二天再投入开发,以更好的更自信的对项目开发负责,如此交替进行,一来项目开发过程中的经验会更加牢固与自信的沉淀下来;二来建立在项目研发需求基础上的技术积累也将更加完善。

来吧,抽时间看看这些原则与方法,不用自己再去造轮子,记住就行,理解更好。

原文标题与地址:

《24 JavaScript Best Practices for Beginners》

http://net.tutsplus.com/tutorials/JavaScript-ajax/24-JavaScript-best-practices-for-beginners/

1.用===取代==

“If two operands are of the same type and value, then === produces true and !== produces false.” – JavaScript: The Good Parts

简单来讲就是

var a="123"

var b=123

if(a==b)

{

alert("a==b"); //right

}

if(a===b)

{

alert("a===b");//wrong

}

2.不建议使用Eval

因赋予字符串太大的权限,会有安全隐患。So Avoid it!

alert(eval("1+3")); //return 4

3.切勿使用易引起歧义的表达式缩写

如:if(2 + 2 === 4) return 'nicely done';

或 if(someVariableExists)

x = false

anotherFunctionCall();

4.使用JsLint 来规范Javascript 代码

http://www.jslint.com/ 毫不夸张的讲,处女座的人千万不要用,后果很严重。

5.请在页面底部引用Script 脚本

这个原则很多老鸟也不太在乎,但坦白来讲,我们都要具有工匠精神才能够做出优秀的产品不是吗?、

原因很简单,因为页面的加载是按顺序来的,如果写在页面顶端,会延迟页面的显示效果,破坏用户体验。

6.请在For循环外部声明变量

for(var i = 0; i < someArray.length; i++) {

var container = document.getElementById('container');  //超级破费的写法,亲,还是写外面吧。

container.innerHtml += 'my number: ' + i;

console.log(i);

}

7.有比手拼字符串更快的方法吗?

var arr = ['item 1', 'item 2', 'item 3', ...];

var list = '<ul><li>' + arr.join('</li><li>') + '</li></ul>';

返回一个字符串。该字符串是通过把 数组 的每个元素转换为字符串,然后把这些字符串连接起来,在两个元素之间插入 分隔符 字符串而生成的。
var arr = [1,2,3,4,5];
var str = arr.join("-");
alert(str);// 弹出 1-2-3-4-5

8. 尽量减少全局变量的使用

否则你的代码在与其它程序进行通信时面临很多风险。

9. 老声常谈,在需要的地方尽量写些注释

10. 持续优化与改进

当用户浏览器的JavaScript被禁用时,您老人家写的网站还能正常使用不? 这种坑爹的问题,还真没尝试过。

11. 不要向SetInterval或者SetTimeOut中传递字符串,用方法名称取代吧。

12. 不要使用With语句

with (being.person.man.bodyparts) {

arms = true;

legs = true;

}

而应该用

var o = being.person.man.bodyparts;

o.arms = true;

o.legs = true;  //原因是用With的话,后期变量的赋值会较麻烦。

13. 使用{}来取代New Object()来创建对象

var o = new Object();

o.name = 'Jeffrey';

o.lastName = 'Way';

o.someFunction = function() {

console.log(this.name);

}

var o = {

name: 'Jeffrey',

lastName = 'Way',

someFunction : function() {

console.log(this.name);

}

};  //取代的原因是{}更加健壮。

14. 使用 [ ] 取代New Array()

var a = new Array();

a[0] = "Joe";

a[1] = 'Plumber';

应该:

var a = ['Joe','Plumber'];

15. 当需要定义一长列变量时,可以使用逗号取代Var。

var someItem = 'some string';

var anotherItem = 'another string';

var oneMoreItem = 'one more string';

应该是:

var someItem = 'some string',

anotherItem = 'another string',

oneMoreItem = 'one more string';

16. 别忘记在句尾加分号

18. “for in”语句来遍历对象中的元素

for(key in object) {

if(object.hasOwnProperty(key) {

...then do something...

}

}

19. 使用Firbug的Timer特性来优化你的代码

function TimeTracker(){

console.time("MyTimer");

for(x=5000; x > 0; x--){}

console.timeEnd("MyTimer");

}

24. 去掉Language,没必要,并且已经被告弃用多时,恩?怎么没人告诉我

<script type="text/javascript" language="javascript">

</script>

(译) 《Javascript 24条最佳实践》的更多相关文章

  1. 译《Time, Clocks, and the Ordering of Events in a Distributed System》

    Motivation <Time, Clocks, and the Ordering of Events in a Distributed System>大概是在分布式领域被引用的最多的一 ...

  2. Note: Time clocks and the ordering of events in a distributed system

    http://research.microsoft.com/en-us/um/people/lamport/pubs/time-clocks.pdf 分布式系统的时钟同步是一个非常困难的问题,this ...

  3. Time, Clocks, and the Ordering of Events in a Distributed System

    作者:Leslie Lamport(非常厉害的老头了) 在使用消息进行通信的分布式系统中,使用物理时钟对不同process进行时间同步与事件排序是非常困难的.一是因为不同process的时钟有差异,另 ...

  4. 【SaltStack官方版】—— Events&Reactor系统—EVENT SYSTEM

    Events&Reactor系统 EVENT SYSTEM The Salt Event System is used to fire off events enabling third pa ...

  5. Method and apparatus for providing total and partial store ordering for a memory in multi-processor system

    An improved memory model and implementation is disclosed. The memory model includes a Total Store Or ...

  6. mysqldump: Couldn't execute 'show events': Cannot proceed because system tables used by Event Schedu

    最近将老版本的mysql 实例倒入 percona 5.5.30,使用的是线上的全备,结果将mysql 库下的表也倒入了,这下可悲剧了,备份报错. 没办法,将mysql库下的数据倒出来,清空,再倒入p ...

  7. Paxos Made Simple(译)

    The Paxos algorithm, when presented in plain English, is very simple. 我叫Leslie Lamport,我最屌. 1. 简介 用于 ...

  8. Paxos Made Simple

    Paxos一致性算法——分布式系统中的经典算法,论文本身也有一段有趣的故事.一致性问题是分布式系统的根本问题之一,在论文中,作者一步步的加强最初一致性问题(2.1节提出的问题)的约束条件,最终导出了一 ...

  9. 《Paxos Made Simple》翻译

    1 Introduction 可能是因为之前的描述对大多数读者来说太过Greek了,Paxos作为一种实现容错的分布式系统的算法被认为是难以理解的.但事实上,它可能是最简单,最显而易见的分布式算法了. ...

  10. 分布式系统(Distributed System)资料

    这个资料关于分布式系统资料,作者写的太好了.拿过来以备用 网址:https://github.com/ty4z2008/Qix/blob/master/ds.md 希望转载的朋友,你可以不用联系我.但 ...

随机推荐

  1. imagemagick 图像处理扩展

    做图像处理的一个工具. http://www.imagemagick.org/script/command-line-processing.php 支持命令行模式,支持接口调用.php 等等都可以,看 ...

  2. mysql性能优化学习笔记(1)优化目的、方向及数据库准备

    前言: 最近参加面试,问到了很多关于mysql的优化方面的问题,回答的不是很好,也是因为原先做的项目流量不是很大,所以对mysql优化不是太了解,所以趁着周末,恶补一下. 本文来源于慕课网sqlerc ...

  3. python基础(三)

    set集合 set集合创建 #方式1: se = {'} #与字典类似dict1 = {'k1','v1','k2','v2'} #方式2: se = set() #创建一个空的集合 list1 = ...

  4. aspose.words 处理word转PDF

    处理如下: import com.aspose.words.Document; import com.aspose.words.SaveFormat; import com.platform.cust ...

  5. Android 之 MediaPlayer类

    在Android中通常用MediaPlayer来播放一些媒体文件,对于音频文件来说只需直接使用MeidaPlayer结合几句代码即可,但是对于视频文件来说稍微复杂一些.单独的MediaPlayer只能 ...

  6. UIImage图片转NSData

    在Iphone上有两种读取图片数据的简单方法: UIImageJPEGRepresentation  取UIImage的JPEG格式的NSData UIImagePNGRepresentation.  ...

  7. eclipse android sdk javadoc

    sdk 的函数不提示帮助信息 查了下是现在adt版本没有doc文件夹,拷贝了早期的版本docs过来 其他具体操作如下:http://blog.csdn.net/lyh7736362/article/d ...

  8. ASP.net MVC3里的HandleErrorAttribute

    在MVC3里使用HandleErrorAttribte类,有2种方式可以使用它,一是在类或者方法上直接使用HandleError属性来定义: // 在这里声明[HandleError]public c ...

  9. C++ dynamic_cast实现原理

    dynamic_cast是一个操作符,其用法不再赘述.查看汇编码可以发现实际调用的是这个函数__RTDynamicCast,其内部实现如下: rtti.h: #pragma once extern & ...

  10. linux中fork创建进程讲解(转)

    大家知道Linux中创建子进程的一个很好的方法是函数调用fork,但是很多初学者对fork的理解上可能有点困难.我们举个例子来看看fork的用法吧.         大家用fork的时候记住fork是 ...