序言
写本文的目的是对最近看过的篇幅进行简单的总结,把我认为重点应该记住的东西写出来,方便以后查看回忆。
ECMAScript基础
Ø 在20世纪90年代,为了提高系统运行速度,各大厂商分别开发了自己的script脚本,用于在客户端进行数据校验等功能,但开发出来的网页不能够跨平台运行。随着业界的担心,制定一个script标准势在必行。ECMAScript就是规定了能适应于各种宿主环境的script核心语法规则。一个完整的javascript库包括三部分:ECMAScript、DOM、BOM。
Ø 原始值:是存储在栈中的简单数据段,也就是说,他们的值直接存储在变量访问的内存空间。
Ø 引用值:是存储在堆中的对象,也就是说,存储在变量处的值是一个指针,指向存储对象的内存处。
Ø 有5中原始值:String、Number、 Object 、undefined 、boolean
Undefined 声明的变量未初始化;
Null 表示尚未存在的对象;
Number 5个特殊值也属于此类型:Number.max_value;Number.min_value;Number.positive_infinity;
Number.negative_infinity;NAN。
相关的方法有:isFinit()、isNaN()。
Ø typeOf 检查变量类型;intenseOf 检测对象类型。
Ø 5种引用类型:
Number类型相关方法:paserInt() 、paserFloat() 、toFixed()、toExponential()、toPrecision()。
String类型包含的常用方法有:charAt() 、charCodeAt()、 indexOf() 、lastIndexOf()、 splice()、 contact() 、lowerCase() 、toUpperCase()。
Ø 函数理解:JS中的函数其实是一个功能完整的对象,类Function可以创建任何类型的函数,也即对象,对象名或叫函数名只是一个指向对象的指针,所以函数名可以做为参数传递给另外一个函数。
第三章 对象基础
JS中有没有类,为何说JS中没有真正的类?什么才叫正式的类?
JS中有三种对象:本地对象、内置对象、宿主对象。
本地对象:独立于宿主环境的ECMAScript定义的对象(类?)最常用的有Array和Date类。
Ø Array类:可以声明一个变量直接进行附值,但是不能用数组的一些方法?(试验)数组Array对象包含的方法有:toString()、valueOf()、toLocalString()、join()、contact()、slice()、push、pop()、shift()、unshift()、reverse()、sort()、splice()。
Ø Date对象:以后再仔细的看。
内置对象:类似JSP中的内置对象,不需要开发者实例化即可使用,调用里面的方法也不需要指出对象的引用,当然了,内置对象都属于本地对象,在JS中提供两个内置对象:global和Math对象。
Ø Global对象:它包含很多方法和和属性,但用代码来测试他又不是个对象,不解,为什么ECMA不叫他是个对象。它包含的方法有:siNan()、isFinite()、parseInt()、parseFloat()、encodeURL()、decodeURL()、eval()。JS提供的一些特殊值及所有本地对象的构造函数都是Global对象的属性,它包含的特殊值有:undefined、NaN、infinity、Object、Array、Function、Boolean、String、Number、Date、RegExp、Error…….and so on。
Ø Math对象:一发很复杂、很有用、必须要熟记其所有方法的对象。它包含很多属性,大多是数学计算时的特殊值,例如:E、LN10、LOG2、Log10E、PI、SQRT1_2、sqrt2。它包含的方法有:min()、max()、abs()、random(),舍入操作的ceil()、floor()、round(),与指数有关的方法exp()、log()、pow()、sqrt()及全部的三角函数求值方法。
JS中所有的方法和属性都是public类型的。
在JS中,对象名只是一个引用,指向对象的内存地址。在JAVA中每个对象都独立站用一快内存空间,变量名即是对象的存储处?
在ECMAScript中没有StringBuffer对象,要通过自己编写代码来创建具有此功能的对象。用Array对象可以使用同样的功能。
ProtoType对象的所有属性和方法都会被传递给那个类的所有实例。
每个对象都有ProtoType属性,可以通过它更改或添加任何本地、内置对象的方法。
定义类(对象):有5种常用的方式,它们分别是构造函数方式、原型方式、混合的构造函数/原型方式、动态原型方式、混合工厂方式。我觉得混合方式和动态原都比较好,在对象比较复杂的情况易用混合方式,在对象定义简单的情况下用动态原型方式更为直观。
第四章 继承
为了安全,不能继承本地类和宿主类?
JS中没有真正意义上的继承,都是模仿继承机制,常用的有三模仿继承的机制:对象冒充、call()方法、apply()方法(实验)、原型链方式(实验)。通过比较还是用混合的方式比较好,用call()方法继承属性,用原型链方式继承方法。
另外利用第三方JS库可以使用其他的继承方式,如:zInherit、xbObjects。
第五章 浏览器中的JS
前三张都是对核心ECMAScript的讨论,以下章节都是与WEB有关的内容。
在XHTML中大于、小于等特殊方法不能被正确识别?(P115)(实验)
BOM:提供了独立于内容而与浏览器窗口进行交互的对象。
Ø Window对象表示整个浏览器窗口。如果使用框架,每个框架都有自己的window对象,存放在Frames集合中,调用window对象的属性和方法时,不必要明确引用它。
Window对象的方法有:
窗口操作:moveBy()、moveTo()、resizeBy()、resizeTo()。
获取位置和大小:screenLeft()、screenTop()。
导航和打开新窗口:用JS可以导航到指定的URL,并用window.open()方法打开窗口,该方法接受4个参数,即要载入页面的URL、新窗口的名字、特性字符串、是否替换当前页面的Boolean值。这个方法返回一个window对象的引用值。Openner属性存放打开它的窗口的引用。
弹出系统对话框:alert()、confirm()、prompt()。
状态栏:window对象的两个属性status、defaultStatus。
暂停和时间间隔:setTimeOut()、clearTimeout()、setInerval()、clearInterval()。(练习使用)
历史:history对象完成。
Ø Document对象:由一系列的集合组成,如anchors、applets、embeds、forms、images、links。方法有write()、writeln()、open()、close()。
Ø Location对象:表示载入窗口的URL,他也可以解析URL,它包含的属性有hash、host、hostname、pathname、port、protocol、search。方法有:replace()、reload()、toString()。
Ø Navigator对象:一个重要的用途就是检测浏览器类型及版本,在chapter 8将详细介绍。
Ø Screen对象:用于用户获取屏幕信息,它包含的属性有availHeight、availWidth、colorDepth、Height、width。
第六章 DOM基础
起源:XML是从SML派生而来的,SGML有许多奇怪的语法规则,解析SGML文档非常困难。XML去掉了SGML许多另人头疼的随意语法,使解析XML变得容易。XML的主要目的是使用文本以结构化的方式来表示数据。ML—标记语言。(待续)
第八章 检测浏览器和操作系统
Ø 对象特征检测法:判断浏览器是否支持某对象/特征,而不在乎浏览器的真正身份,此方法简单,问题是不能检测浏览器的具体类型。
Ø User_agent检测法:原理:每个访问望阿站的程序都会提供一个user_agent字符串来向服务器确定它的身份。用mavigator.userAgent可以得到此字符串,这个字符串是user_agent方式检测浏览器的基础。
当然了记住各浏览器的user_agent字符串将给你带来编程时的方便,但是好象不容易。(有必要吗?)
user_agent字符串简史:了解它,可以让你更容易第记住浏览器的user_agent字符串。
Ø 浏览器检测脚本:此部分属于公用代码,应该写到一个公用文件中,每个项目都可以直接用,我所参与的项目中有这些脚本文件吗?
用navigator.appVersion不就可以确定浏览器版本了吗?为什么还要用user_agent方式获取?
书中只讨论windows、macintosh平台?
练习:写一个用于比较来年感个版本号大小的函数;写一个用于检测是否为IE和检测IE版本号的函数。
Ø OS检测脚本:用navigator.platform来检测OS。
练习:写一个检测windows版本的程序。
第九章 事件
事件流:IE的冒泡型事件留、Netscape的捕获型事件留及DOM事件留。
事件处理函数:给元素附加事件处理函数在IE和DOM有不同的实现方式。在IE中每个元素都有attachEvent()和detachEvent()方法;在DOM中有对应的addEventListener()、removeEventListener()方法。
事件对象:包含发生事件时鼠标、键盘等信息的对象。
在IE中这些信息被包含在event对象中。熟记event对象的属性和方法。P234
事件类型:
Ø 熟记鼠标事件:click、dblclick、mouseout、mouseover、mouseup、mousemove。
每个鼠标事件都会给event对象的以下属性添入值:坐标属性、Type属性、srcElement属性、shiftKey ctrlKey altKey、button属性。鼠标事件的顺序。
此节内容可以结合第十一章内容学习。
Ø 键盘事件:keyDown—键盘上按下某键时触发,针对所有键。keyPress—按下键并产生一个字符时触发,所以按下shift、art、ctrl及方向键时并不会触发此事件。
HMTL事件:load事件、unload事件、select事件、change事件、resize事件、scroll事件、blur事件、body的两个属性—scrollLeft和scrollTop。结合第十一章学习。
第十章 高级DOM技术
CSS中样式特性名字的书写与JS中不同,在Style对象中,两个单词的样式表示方法是匈牙利表示法。
Style对象可以操纵内联样式的值。它有个cssText属性,存储此CSS样式的字符串。
DOM样式的方法:
提示:此类方法在IE中不实用。DOM中Style对象中包含方法:getPropertyValue()、getpropertyPriority()、item()、removeProperty()、serProperty()。
自定义鼠标提示:原意—鼠标移到某元素上显示title提示;
现意—当鼠标移到某元素上时,让某他原本隐藏的DIV显示在某特定位置(一般在鼠标旁边)
可折叠区域:介绍一个具体应用。很不错的,练习。
访问样式表:样式表—在<style/>元素中或在外部样式表中定义的CSS样式。
Document.styleSheets可以获得样式表的引用。它有一些常用的属性—disabled、type等。
样式表引用对象有个cssRules或rules属性,它包含样式表中所有的CSS规则,它是一个集合。
最终样式:它由所有内联样式和CSS规则计算出的最终结果,也即其作用的CSS样式元素集合。在IE中可以用style.currentStyle来获得。
innerText和innerHTML
不解:oDiv.innerText = oDiv.innerText将删除oDiv标签。
IE中的范围:
创建范围—creatTextRange();
选择某个区域:findText();
移动选区:move()、moveStart()、moveEnd()、expand();
与范围内容交互:text属性和pasteHTML()方法;
折叠范围:collapse() 就是清楚remove、clear的意思?
比较范围:compareEndPoints()、isEqual()、isRange();
复制范围:duplicate();
范围的引用:值得一看,30秒钟。
第十一章 表单和数据完整性
<form/>元素的特性:method、action、enctype、accept、accept_charset。
表单元素的共性:disabled、form、blur、focus()、onblur()、onfocus()。
仅提交一次:当点击提交按钮后禁用它,是用户不会重复提交多次。
不能用submit按钮并用onclick禁用,因为在表单提交前已经被禁用,这讲导致表单不被提交,怎么用普通的button就可以?
Reset:即使使用reset()方法, onreset事件函数仍会被触发。
文本框事件:blur、focus、change、select,其中change事件是在文本框失去焦点后才被触发。
自动选中文本:一个具体应用。当获到焦点时便选中文本。
自动切换到下一个:一个具体应用。代码写得不错,值得一看。
限制textarea的字符数:虽然textarea不能用maxlength属性来限制最大输入长度,但仍可以设置manlength属性可,并可以通过getAttibute()来获取这个值。
允许/阻止文本框中的字符:阻止无效字符,只允许输入有效字符。看代码,挺有用的。
不要忘记粘贴:禁止粘贴;失去焦点时进行验证。
使用上下方向键操作数字文本(自增、自减):
列表和组合框:只要给 <select/>元素添加size特性就可以使组合框变为列表。Multiple属性用于设置是否可多选,默认不能。
删除选项:将某想置为null;用remove()方法。
移动选项:可以直接从一个列表框移到另一个列表框?(实验)
重新排序选项:重要用到DOM中的insertBefore()函数。
自动提示文本框:创建匹配的Array数组;获取匹配的只的Array;将选中的条目添加到文本框。再看代码,写得很好。
第十二章 对表格排序
这一章探索了如何JavaScript将很多基于服务器端的功能转移到客户端,即对HTML表格进行排序。这一章完全没有新的语法知识,完全是对以前章节知识的应用。练习用一下一切OK。
知识要点:Array对象的sort()方法可以接受一个客户化的比较函数作为参数。
建立一个能处理各种数据类型的比较函数。
Reverse()倒序。
用<、> 可以对String、Date、Number类型的数据进行比较?
可以为HTML元素添加自定义特性。
第十三章 拖放
系统拖放:由操作系统处理完成的拖放行为;
模拟拖放:创建可以跟着鼠标移动的绝对定位层。
另外还可以利用aDragDrop库来实现拖放功能。
第十四章 错误处理
JS中的错误:发生在解析(编译)时的语法错误;
JS中的异常:在运行时发生。如window.yangaiyou();语法正确,但会发生异常。
l onerror对象:在window对象和图象对象?上都有onerror事件处理函数,当页面发生错误时,onerror事件将在window对象上触发。当页面上的图象不能载入时会在image对象上触发。
可以这样定义onerror函数
window.onerror = function(sMessage,sUrl,sLine){};
onerror函数的三个参数用于确定错误确切的信息,代表的意思依次为:错误信息;发生错误的文件;发生错误的行号。
l Try...catch语句:
Catch语句捕获的是一个Error对象,他有name和message属性,name指明错误的类型或叫名字;message指明具体的错误信息。
也可以用类似throw new Error(“发生了错误!”)的语句来抛出异常信息。
第十五章 javascript中的XML
l IE中对XML DOM的支持:是基于ActiveX的MXXML库。用ActiveXObject类来创建ActiveX对象,形如
Var oXmlDom = new ActiveXObject(“Microsoft.XmlDom”);
参数为要实例化的ActiveX对象的字符串代号。
如何确保使用最新的XML DOM?
创建XML DOM 对象的下一步自然就是载入XML文件,XML DOM提供了两种方法来载入XML文件:load()、loadXML()。前者用于从服务器端载入XML文件;后者可以直接输入字符串来载入。如:
oXmlDom.load(“./treeAction.do”);
执行完这行代码oXmlDom对象就会包含能表示XML文件结构的一个DOM文挡,这样就可以使用DOM所有的特性和方法了。
默认采用异步方式载入,当readyState值发生变化时会触发onreadystatechange函数,当其值为4时表示XML文件已完全载入,通常这时就要调用回调函数。
我们应该在XML文件载入后立即检查错误,错误信息都包含在parseError对象中,我们可以自己创建错误提示,通常是由于XML文件格式错误造成的。
AJAX必备知识。
l xPath小语言:
它提供了如何定位一个或多个结点的功能。它分两部分:上下文结点;结点模式。前者给出要匹配文档的开始位置;后者是一个字符串形式的选择器,可以想象成正则表达式。
IE中提供selectNodes()方法来返回匹配的结点集合,参数为要匹配的字符串(正则表达式)。形如:
oXmlDom.documentElement.selectNodes(“employee/name”);
选择了所有<employee/>元素下的<name/>元素。
l XSLT 可扩展样式表语言转换:
XSLT可以对XML文件进行操作,将其转换成其他的文本格式,入HTML。XSLT文件称为样式表,由一些模板组成,通过为不同元素和条件定义模板,XSLT成了XML文件的转换器。
第十六章 客户端与服务器端的通信
第十七章 Web服务
第十八章 与插件进行交互
第十九章 部署问题
第二十章 JS的文莱
posted on 2007-07-01 13:50
杨爱友 阅读(1942)
评论(10) 编辑 收藏 所属分类:
java相关技术