JavaScript风格要素

作者:realazy 来源:realazy 时间:2007-10-25 16:57:00 

关于英文的写作有一本十分著名的书,The Elements of Style(风格要素),编写程序也有一本The Elements of Programming Style(编程风格要素)。证明了在某种程度上,编写程序其实就是语文写作,清晰的风格对程序的质量有着重要的影响。草率含混的风格会隐蔽程序真性。

作为JavaScript Guru, Douglas Crockford提出了自己对JavaScript风格的创见(第一部分第二部分)。

第一部分主要讨论JavaScript语言本身,包括:

  • 淘汰过时的构建。

    讨论了在HTML页面引入JavaScript的方式。经典的写法是:


    <script language=javascript><!-- --></script> 

    language并不是W3C所认同的标准,建议使用的是type, 但作为type值的MIME type并没有标准化(有时是text/javascript, 有时是application/ecmascript),但目前所有的浏览器都是使用JavaScript作为默认的脚本语言,因此仅仅些<script>就是安全的。随着NetScape 3的淘汰,<-- -->也不是必要的了。


  • (注:这个东西Web标准社区也有自己的看法,并认为应该写type="text/javascript",我也赞成。)

  • 在结构中始终使用区块。

    莫偷懒,省略区块(即{ })会引发不经意的错误和麻烦。即使只有一句,也老老实实写上:

    if (expression) { ... } 


  • 避免在表达式中进行赋值。虽然可以使代码紧凑,但会让控制流程难于理解。

  • 使用对象扩充。在不需要构造函数的对象中,不如先创建一个空对象,然后扩充它。

  • 使用通用库。注意提高代码的重用。

第二部分主要讲的是一些使程序更清晰和简洁的习惯用法:

  • 使用==得当心强类型。1 == true是真,但1 === true却为假。

  • 使用?:运算符选择两值之一。在这种操作中,三元运算符为此而生。

  • 永远不要使用隐含的全局变量。请记得声明变量时加上var.

  • 不要使用?:来选择两种行为的其一。写作p.style.backgroundColor = z ? '#fff' : '#989898';而不是(z == 0) ? p.style.backgroundColor = '#fff' : p.style.backgroundColor = '#989898';。

  • 使用||来指定一个默认值。最典型的莫过于处理事件参数了:var e = e || event;。

  • 全局变量是 * 的。

  • 使用内部函数来避免全局变量。

这些风格是Crock在2005年提出的,现在有些已经深入人心(如不要使用全局变量),因而也没有必要多做解释了。如果你有所疑惑,不如详细看看这两篇风格文章,里面有大量的代码来举证这些风格的重要性。

标签:JavaScript,风格
0
投稿

猜你喜欢

  • 用browsercam做用户登录后页面的兼容性测试

    2008-12-29 12:05:00
  • 有关JS中Event对象的几点总结

    2009-03-06 12:36:00
  • MySQL数据库误删回滚的解决

    2024-01-19 16:31:11
  • [机器视觉]使用python自动识别验证码详解

    2021-09-12 03:24:36
  • Python类和实例的属性机制原理详解

    2022-12-12 19:47:27
  • ASP使用FSO组件生成HTML静态页面

    2007-10-15 12:19:00
  • Python爬取科目四考试题库的方法实现

    2023-02-14 00:29:39
  • SQL如何使用正则表达式对数据进行过滤

    2024-01-26 23:15:05
  • ASP 使用Filter函数来检索数组

    2011-04-30 16:49:00
  • 基于tensorflow指定GPU运行及GPU资源分配的几种方式小结

    2021-10-03 10:22:27
  • Python列表操作方法详解

    2021-05-17 14:45:58
  • Python实现的视频播放器功能完整示例

    2023-05-04 06:33:56
  • 利用JS打造黑客代码雨效果

    2024-05-03 15:05:16
  • 解决Django一个表单对应多个按钮的问题

    2021-07-15 15:34:55
  • python 使用socket传输图片视频等文件的实现方式

    2022-11-12 11:55:37
  • 浅谈js中startsWith 函数不能在任何浏览器兼容的问题

    2024-04-23 09:11:38
  • 带你理解vue中的v-bind

    2023-07-02 16:52:44
  • mysql 通配符(sql 高级过滤)

    2024-01-24 17:15:39
  • PHP 动态随机生成验证码类代码

    2024-05-02 17:18:02
  • Python 私有函数的实例详解

    2023-03-07 08:30:40
  • asp之家 网络编程 m.aspxhome.com