• 区分大小写

  • 单引号双引号

大多数开发人员选择用单引号,因为XTHML要求所有XHTML的属性都必须使用双引号

var html='<h2 class="a">A list!</h2>'
+'<ol>'
+'<li class="a">Foo</li>'
+'<li class="a">Bar</li>'
+'</ol>'

总是比

var html="<h2 class=\"a\">A list!</h2>"
+"<ol>"
+"<li class=\"a\">Foo</li>"
+"<li class=\"a\">Bar</li>"
+"</ol>"

但是对于行内(inline)单引号仍然必须转义:

var html = '<p class="a">Don\'t forget to escape single quotes!</p>';
  • 换行

最佳方案就是使用连接操作符(+)并将每行用引号括起来:

var html='<h2 class="a">A list!</h2>'
+'<ol>'
+'<li class="a">Foo</li>'
+'<li class="a">Bar</li>'
+'</ol>'
  • 可选的分号和花括号
  • 重载(并非真正的重载)

相同名字的函数永远只能存在一个实例。如果编写如下的函数

function alert(message)
{
ADS.$('messageBox').appendChild(document.createTextNode(message));
}

浏览器将不会执行往常的提示信息

  • 匿名函数

看一下我们常规的注册函数

function clicked()
{
alert('Linked to :'+this.href);
}
var anchor= ADS.$('someID');
ADS.addEvent(anchor,'click',clicked)

匿名函数:

var anchor=ADS.$('someId');
addEvent(anchor,'click',function(){
alert('Linked to:' + this.href);
});
  • 作用域解析和闭包

作用域:(通过var维护作用域链)

function myFunction()
{
var myVar='inside';
}
//定义变量
var myVar='outside';
myFunction();
alert(myVar);//outside

如果去掉:

function myFunction()
{
myVar='inside';
}
//定义变量
var myVar='outside';
myFunction();
alert(myVar);//inside

下面看一个例子:

ADS.addEvent(window, 'load', function(W3CEvent) {
for (var i=1 ; i<=3 ; i++ ) { var anchor = document.getElementById('anchor' + i); ADS.addEvent(anchor,'click',function() {
alert('My id is anchor' + i);
});
}
});
<ul>
    <li><a href="http://advanceddomscripting.com" id="anchor1">Anchor 1</a></li>

<li><a href="http://advanceddomscripting.com" id="anchor2">Anchor 2</a></li>

<li><a href="http://advanceddomscripting.com" id="anchor3">Anchor 3</a></li>

</ul>

目的:点击anchorx 便提示My id is anchorx,但是情况却不是这样。

原因:i的值时间上是在单机时间发生时,才从 作用域链中取得的,当单机时间发生时,initAnchors()已经执行完毕,因此i的值为4,所以每个alert()显示的都是同一个结果。原因:

处理办法:

function

registerListener(anchor,i) { ADS.addEvent(anchor, 'click', function() { alert('My id is anchor' + i); }); } function initAnchors() { for ( i=1 ; i<=5 ; i++ ) { var anchor = document.getElementById('anchor'+i); registerListener(anchor,i); } } ADS.addEvent(window, 'load', initAnchors);

  • 迭代对象

通过hasOwnProperty()方法检查不涉及其他对象继承的属性和方法。智慧检查在特定对象自身中直接创建的属性

var all=document.body.getElementsByTagName('*'); for(i in all) { if (!all.hasOwnProperty(i)) { continue; } //对all[i]元素进行某些操作 }
  • 函数的调用和引用(不带括号)
//赋一个函数返回值 var foo = exampleFunction(); //赋一个函数的引用 var foo = exampleFunction;

JavaScript DOM高级程序设计1.3-常见陷阱--我要坚持到底!的更多相关文章

  1. JavaScript DOM高级程序设计 4.2 事件类型--我要坚持到底!

    对象事件 load和unload(载入页面的时候调用load,关闭页面的时候调用unload) abort和error 对于载入图像时出现错误的情况,可以使用error事件侦听器来进行说明: ADS. ...

  2. JavaScript DOM高级程序设计 7.向应用程序加入Ajax--我要坚持到底!

    有时候,或许是因为理解能力,也或许是因为浮躁,看东西总是不入心,而且还老是想跳过本节,或者赶紧看完本节,这样的恶性循环,让我在即没有真正的学习到知识,又打击我的学习信心,还浪费了我很多事件,我想,当遇 ...

  3. JavaScript DOM高级程序设计 4.3控制事件流和注册事件侦听器--我要坚持到底!

    一.事件流 我们通过下面一个实例,进行说明. <body> <h1>Event Flow</h1> <ul id="nav"> &l ...

  4. JavaScript DOM高级程序设计 3.6 实例 将HTML代码转换成DOM代码(附源码)--我要坚持到底!

    作为一名Web开发者,最讨厌的事情就是重复性任务,摆脱乏味的日常重复性事物的一种方法,是借助可重用的对象或者说与你现在建立的ADS库类似的库,另外一种让事情变得有意思,且能够加速开发进程的方式是编写能 ...

  5. JavaScript DOM高级程序设计 3.-DOM2和HTML2--我要坚持到底!

    由一个HTML进行说明,我就不敲了,直接copy <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" " ...

  6. JavaScript DOM 高级程序设计读书笔记二

    响应用户操作和事件 事件就是操作检测与脚本执行的组合,或者基于检测到的操作类型在某个对象上调用事件侦听器(事件处理程序). 事件的类型 事件可以分为几种类型:对象事件,鼠标事件,键盘事件(只适用于do ...

  7. JavaScript DOM 高级程序设计读书笔记一

    创建可重用的对象 简而言之,对象就是包含一组变量(称为属性)和函数(称为方法)的集合的实例.对象通常由类派生而来,而类中定义了对象拥有的属性和方法.如果你的脚本中都是对象之间的交互操作,那么就可以称之 ...

  8. JavaScript DOM高级程序设计 5动态修改样式和层叠样式表2--我要坚持到底!

    把样式置于DOM脚本之外 style属性 我们可以这样设置前景色之类的属性: element.style.color='red'; 也可以使用下面的代码设置背景颜色: element.style.ba ...

  9. JavaScript DOM高级程序设计 5动态修改样式和层叠样式表1(源代码)--我要坚持到底!

    W3C DOM2样式规范 现在这边贴出本章要的源代码,注意要结合前面用到的ADS库http://vdisk.weibo.com/s/Dq8NU CSSStyleSheet对象属性: type :始终是 ...

随机推荐

  1. 有很多10或100开头的IP在频繁访问ECS的原因

    http://help.aliyun.com/knowledge_detail.htm?spm=5176.7114037.1996646101.1.PcbeK6&categoryId=8314 ...

  2. WCF 宿主与通信模式(二)

    宿主 每个WCF服务都必须托管在Windows进程中,该进程称为宿主进程(host process) 单个宿主进程可以托管多个服务,相同的服务类型也可以托管在多个宿主进程中. wcf中托管服务一般有一 ...

  3. C# 与C++的数据转换

    一.类型转化 下面重点罗列下常用的类型转化. C++类型 C#类型 备注说明 Int Int16.Int32 没有悬念,直接转化 Uint UInt16.Uint32.int 在程序中,不太清楚是,就 ...

  4. js替换字符串的所有示例代码

    js如何替换字符串中所有. /** * 替换字符串中所有 * @param obj 原字符串 * @param str1 替换规则 * @param str2 替换成什么 * @return 替换后的 ...

  5. centos6.5 最小化安装无法上网

    在VMware里装了个centos 6.5.  最小化安装后无法上网.在 google里找到答案 第一步:执行命令启动网卡 (最小化安装不是自动启动的) [root@localhost]# ifcon ...

  6. 使用bootstrap+asp.net mvc4+IBatis.Net实现的小程序

    这个项目用到了三个技术点 1.bootstap 3.0 2.asp.net mvc4 3.IBatis.Net 这个三个技术点分别解决前端界面展示.中间mvc路由控制.实体框架映射数据访问 重点分页问 ...

  7. ueditor使用中的坑

    项目中要使用富文本编辑于是采用了百度的开源富文本编辑器 ueditor    官网 http://ueditor.baidu.com/website/ 使用方法就按照官方的来的. 经过使用记录以下要点 ...

  8. MySQL 5.6.21 最新版的安装

    上一篇 写了对于入门者来说困难的事情,博主最近装了mysql软件,下面来看看mysql的安装. 下载mysql软件安装程序,我的是在百度软件中心上下载的,选择百度是因为里面没有什么捆绑软件: 下载完了 ...

  9. Oracle访问数据的存取方法

    1) 全表扫描(Full Table Scans, FTS) 为实现全表扫描,Oracle读取表中所有的行,并检查每一行是否满足语句的WHERE限制条件.Oracle顺序地读取分配给表的每个数据块,直 ...

  10. SQL重复记录查询(转载)

     1.查找表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断 select * from people )  例二:  select * from testtable  where ...