前言:
之前简单的用过Javascript,感觉这是一种很简单的语言。最近看了一些关于Javascript的内在机制和面向对象特征的博客后,觉得自己得重新认识这种语言了。JS的本质是基于哈希散列表实现的解释性弱类型语言。这样特性造就了它可以比纯面向对象语言灵活很多。理解Javascript的本质后,回头再看复杂的脚本,发现它们已经很简单了。对于Javascript的初学者,推荐"Inside JavaScript"这本书。
1. Script的执行顺序问题
Javascript脚本是嵌入在客户端的HTML中执行的。在<HEAD>中的脚本先于<BODY>中执行。一般来说,放在前面的脚本会先执行,不过一些被事件触发执行的脚本执行顺序会被提前。
2. 脚本的几种常用形式
//最常用
<SCRIPT LANGUAGE="JavaScript">
</SCRIPT>
//引用外部脚本
<SCRIPT LANGUAGE="JavaScript" SRC="www.myjavascripts/steve/script.js">
</SCRIPT>
//事件响应中的inline脚本
<BODY ONLOAD="alert('All loaded.')">
<H1>Executing Scripts After a Document Loads</H1>
</BODY>
//特定Element的特定事件的响应脚本,这种特殊脚本不会默认执行
<SCRIPT FOR="button1" EVENT="onclick" LANGUAGE="JavaScript">
alert("You clicked the button!")
</SCRIPT>
<FORM NAME="form1">
<INPUT TYPE="BUTTON" NAME="button1" VALUE="Click Me!">
</FORM>
3. 系统window对象和document对象
window对象代表客户端显示出来的整个窗体页面。document对象代表窗体页面的content。它们都是基于W3C的DOM模型,这样可以很好的屏蔽不同浏览器对JS支持上的差别。浏览器对象都是由属性,方法和事件构成的。
4. document对象的含义
<BODY>
<H1>Here we go!</H1>
<SCRIPT LANGUAGE="JavaScript">
document.write("Hello from JavaScript!")
</SCRIPT>
<H1>Hello!</H1>
</BODY>
在这段脚本中,两个H1元素都是document中的元素。整个document在浏览器中现实的内容都存储在一个内存流中。document.write("Hello from JavaScript!")的作用是在浏览器页面中输出"Hello from JavaScript!",前后的两个H1元素的内容也是流的一部分。
5. 脚本执行错误
JS没有编译过程中的类型检查,所以在运行过程中很容易出现错误。对于没有被捕获或者被错误事件处理的错误,浏览器会弹出对话框提示。
6. 服务器端脚本
<SERVER>
write(request.ip)
</SERVER>
//这段在IE中好像无法正确执行
7.JS中的浏览器对象
最顶层的是window, 次级是location, document,history,frame。document之下包括anchor,form,link等。
8. JS中的内建对象类型
String,Number,Boolean,Null,Object,Function。本质上Function是一种特殊的Object类型。
9.变量
通过var进行声明,可以把数组,String,Object,Function随意的赋值给变量。开发者需要特别注意JS的质量,因为它是一种弱类型的解释性语言。
10.Array
数组中可以存储任意类型的数据。通过下标Index或者名称字符串访问。也可以通过new关键字创建。
11. 和其他语言类似,支持if, switch, 算术操作符号,逻辑操作符等。
12. 支持for, for...in语句,支持while, do---while
for (var property in document) {
document.write(property + ": " + document[property] + "<BR>")
//访问document对象中的所有属性
13.支持with
with(Math){
document.write("cos(pi) = " + cos(PI) + "<BR>")
document.write("sqrt(4) = " + sqrt(4) + "<BR>")
}
//表达式的前缀都是Math
14. Function
函数可以通过new来构造,这也正式说明了函数也是一个对象。函数对象的属性包括arguments,arguments.callee, arguments.caller,constructor。方法包括apply, call,这两个方法用来转换Function的Context Object,很有趣。
15. this关键字
代表当前Context Object。
16. JS内建函数
包括encodeURI,decodeURI这两个HTML URI编码解码的函数,以及eval这个把string转化为JS语句来执行的函数。
17. 处理Error
通过window的onerror事件来处理,或者通过try-catch-finally。支持throw抛出错误。
18. document.close( ), window.close( )的区别
window.close( )表示关闭当前窗体,系统会弹出确认对话框。document.close( )用来表示document的内容流禁止写入,一般用于window.open, document.open之后。对于close( )函数,如果用在inline script中,表示document.close( );否则表示window.close( )。