14条最佳JS代码编写技巧[译](5)
作者:Sofish 来源:幸福收藏夹 发布时间:2009-11-09 19:37:00
9. 避免 document.all
document.all 是由Microsoft 的 IE 所引进的,并不是一个标准的 Javascript DOM 特性。尽管大多数新的浏览器支持它以支持依赖于它的糟糕代码,(而)还有很多浏览器是不支持的。
并没有理由其他方法都不适用,而一个老的IE浏览器(<5.0)需要支持,而在Javascript中使用 document.all 作为一个折衷方法。 你并不需要使用 document.all 来检测其是不是IE浏览器,因为其他浏览器现在一般都支持。
只把 document.all 当做最后的选择:
if (document.getElementById) {
var obj = document.getElementById("myId");
}
else if (document.all) {
var obj = document.all("myId");
}
一些使用 document.all 的原则:
同尝试其他方法
当其作为最后的选择
当需要支持 5.0 版本以下的 IE 浏览器
总是使用 “if (document.all) { }” 来查看是否支持.
10. 不要在脚本代码块中使用HTML注释
在 Javascript 的旧日子(1995)里,诸如 Netscape 1.0 的一些浏览器并不支持或认识 <script>标签。所以,当 Javascript 第一次被发布,需要有一个技术来让实些代码不被当做文本显示于旧版浏览器上。有一个”hack” 是在代码中使用 HTML 注释来隐藏这些代码。
使 HTML 注释并不好:
<script language="javascript">
<!--
// code here
//-->
</script>
在今天,没有任何一个常用的浏览器会忽略掉 <script> 标签。因此,再没必要隐藏 Javascript 源代码。事实上,它还可以因为下面的理由,被认为是无益的:
在 XHTML 文档中,源代码将向所有浏览器隐藏并被渲染成无用的(内容);
在 HTML 注释并不允许 ,这个会让任何递减操作将失效。
11. 避免乱用全局命名空间
一般很少需要全部变量和函数。全局使用将可能导致 Javascript 源文件文档冲突,和代码中止。因此,一个好的做法是在一个全局命名空间内采用函数性的封装。有多个方法可以完成这个任务,有此相对比较复杂。最简单的方法 是创建一个全局对象,并把属性和方法指派给这个对象:
创建一个命名空间:
var MyLib = {}; // global Object cointainer
MyLib.value = 1;
MyLib.increment = function() { MyLib.value++; }
MyLib.show = function() { alert(MyLib.value); }
MyLib.value=6;
MyLib.increment();
MyLib.show(); // alerts 7
命名空间也可以使用 Closures(闭包?) 来创建,并且 Private Member Variables (私有变量?) 也可以伪装于 Javascript中。
12. 避免同步的 ‘Ajax’ 调用
当使用”Ajax”请求时,你要么选择异步模式,要么使用同步模式。当浏览器行为可以继续执行,异步模式将请求放在后台执行,同步模式则会等待请求完成后才继续。
应该避免同步模式做出的请求。这些请求将会对用户禁用浏览器,直至请求返回。一旦服务器忙,并需要一段时间来完成请求,用户的浏览器(或者 OS)将不能做任何其他的事,直至请求超时。
如果你觉得自己的情况需要同步模式,最大的可能是你需要时间来重新想一下你的设计。很少(如果有的话)实际上需要同步模式的 Ajax 请求。
13. 使用 JSON
当需要将数据结构存储成纯文本,或者通过 Ajax 发送/取回数据结构,尽可能使用 JSON 代替 XML。JSON (JavaScript Object Notation) 是一个更简洁有效的数据存储格式,并且不依赖任何语言(and is a language-neutral)。
14. 使用正确的 <script> 标签
不造成在 <script> 中的使用LANGUAGE 属性。一个合适的方式是创建如下的 Javascript 代码块:
<script type="text/javascript">
// code here
</script>


猜你喜欢
- 数学函数 1.绝对值 S:select abs(-1) value O:select abs(-1) value from dual 2.取
- 主机环境:(Python2.7.9 / Win8_64 / bs4)利用BeautifulSoup4来抓取 www.pm25.com 上的P
- 本文实例为大家分享了python实现超市管理系统的具体代码,供大家参考,具体内容如下这个相比上个程序简单很多,首先他没有太过复杂的逻辑关系,
- 本文实例为大家分享了javascript实现花样轮播效果的两种实现方法,供大家参考,具体内容如下第一种:简单的带按钮的轮播介绍:左右按钮控制
- 1、首先简述数据挖掘的过程第一步:数据选择可以通过业务原始数据、公开的数据集、也可通过爬虫的方式获取。第二步: 数据预处理数据极可能有噪音,
- 另外一类常用的模板标签是通过渲染 其他 模板显示数据的。 比如说,Django的后台管理界面,它使用了自定义的模板标签来显示新增/编辑表单页
- 一般常用的有两个方法:1、使用DataFrame.index = [newName],DataFrame.columns = [newNam
- 1、创建方法:方法一:create table TempTableName或select [字段1,字段2,...,] into TempT
- 本文实例讲述了Python判断文本中消息重复次数的方法。分享给大家供大家参考,具体如下:#coding:gbk'''
- 最近在使用NFineBase框架+c#做一个系统的时候,在使用sql server 2012 连接数据库的时候 ,遇到几个问题。一.就是在本
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- 本文实例讲述了Python向Excel中插入图片的简单实现方法。分享给大家供大家参考,具体如下:使用Python向Excel文件中插入图片,
- 1、一个或多个文件夹组成一个模块,而一个模块组合构成了一个包发布在公共目录里。2、包必须有__init__文件,否则就是一个文件夹。实例im
- 最近了解下基于 Token 的身份验证,跟大伙分享下。很多大型网站也都在用,比如 Facebook,Twitter,Google+,Gith
- SQL Server:Select TOP N * From TABLE Order By NewID() view
- 首先呢,我们来看看一般项目路由是怎么划分的。为什么这么划分呢?如果大项目业务非常多,单纯的单页面很难维护,我们只有这样规范化,才能高效率。模
- Python自动的os库是和操作系统交互的库,常用的操作包括文件/目录操作,路径操作,环境变量操作和执行系统命令等。文件/目录操作获取当前目
- MNIST数据集介绍MNIST数据集中包含了各种各样的手写数字图片,数据集的官网是:http://yann.lecun.com/exdb/m
- 接触过 Django 的同学都应该十分熟悉它的 ORM 系统。对于 python 新手而言,这是一项几乎可以被称作“黑科技”的特性:只要你在
- 这篇文章主要介绍了如何使用python3获取当前路径及os.path.dirname的使用,文中通过示例代码介绍的非常详细,对大家的学习或者