(摘录) 《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. zoj1136 Multiple

    记忆化搜索,因为要求最小的,肯定是从小到大,依次添加,那么通过bfs,队列貌似是最好的选择.因为很可能那个数爆long long,所以采用字符串存储,并记录余数,通过模拟除法的方式来写. 剪枝:因为后 ...

  2. Toolkit Pro学习--Toolbar的创建

    一.新建Toolkit Pro应用程序 安装好Toolkit Pro后,打开VS2008,新建-项目-Toolkit Pro Application.如图1所示. 图1:Toolkit Pro创建窗口 ...

  3. com.sun.jdi.InvocationException occurred invoking method.

    文章来源于网络, 自己也遇到同样的问题,也是采用这样的方式解决的.原文链接http://zuiyanwangyue.iteye.com/blog/470638 在 HibernateDaoSuppor ...

  4. jQuery无缝滚动向上

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  5. Handle 消息机制

    android中Handle类的主要作用: 1.在新启动的线程中发送给消息 2.在主线程获取.处理消息 为什么要用Handle这样的一个机制: 因为在Android系统中UI操作并不是线程安全的,如果 ...

  6. CSS 3 属性学习大纲

    1. Gradient 渐变 2. RGBA 颜色透明 3. Border-radius 圆角 4. text-shadow 文字阴影 5. box-shadow 图层阴影 6. Transform ...

  7. 把WCF服务部署服务器IIS异常(详细:处理程序“svc-Integrated”在其模块列表中有一个错误模块“ManagedPipelineHandler”)

    详细:处理程序“svc-Integrated”在其模块列表中有一个错误模块“ManagedPipelineHandler” 原因: vs2010默认的是4.0框架,4.0的框架是独立的CLR,和2.0 ...

  8. CSS自学笔记(14):CSS3动画效果

    在CSS3中也新增了一些能够对元素创建动画处理的属性.通过这些新增的属性,我们可以实现元素从一种样式变换成另一种样式时为元素添加动态效果,我们就可以取代网页中的动态图片.flash动画和JavaScr ...

  9. JLINK烧写BIN文件到nand、norflash、SDRAM

    1. 简要说明 JLink的调试功能.烧写Flash的功能都很强大,但是对于S3C2410.S3C2440的Flash操作有些麻烦:烧写Nor Flash时需要设置SDRAM,否则速率很慢:烧写Nan ...

  10. 关于LWIP---UDP

    lwip是一个轻量级的TCP/IP协议栈(Lightweight TCP/IP Stack)实现,最初是瑞士计算机科学学院Adam Dunkels编写的一个应用于无操作系统的嵌入式系统中的TCP/IP ...