第1章——JavaScript简介
一、JavaScript实现
JavaScript是一种专为与网页交互而设计的脚本语言,由下列三个不同的部分组成:
核心(ECMAScript) 由ECMA-262定义,提供核心语言功能。
文档对象模型(DOM) 提供访问和操作网页内容的方法和接口。
浏览器对象模型(BOM) 提供与浏览器交互的方法和接口。
第2章——在HTML中使用JavaScript
一、<script>标签
1、<scripot>元素
向HTML页面中插入JavaScript的主要方法,就是使用<script>元素。
使用<script>元素的方式有两种:直接在页面中嵌入js代码和包含外部的js文件。
包含在<script>元素内部的JavaScript代码将被从上至下依次解释。在解释器对<script>元素内部的所有代码求值完毕之前,页面中的其余内容都不会被浏览器加载或显示。 注意:在使用嵌入js代码时,代码中不能出现“</script>”字符串,浏览器会认为那结束标签。"<\/script>"可解决('\' '/'符号)
通过<script>元素来包含外部js文件,src属性是必须的。属性的值时指向外部js文件的链接。与嵌入式一样,在解析外部js文件(包括下载该文件)时,页面的处理也会暂时停止。若果在XHTML中,结束标签可以省略。需注意:带有src属性的<script>元素标签之间不能再包含额外的js代码,否则将被忽略。src的值也可以是来自外部域的js文件。
只要不存在defer和async属性,浏览器就会按照<script>元素在页面中出现的先后顺序对他们依次进行解析。
2、标签的位置
(1)、<head>元素中:若js代码过多,页面会出现明显的延迟,延迟期间页面呈现空白。
(2)、<body>元素中页面的内容后面:先解析html代码,再解析js代码。
3、延迟脚本
defer属性:脚本会被延迟到整个页面都解析完毕后在运行。(按出现的先后顺序执行)
注:只适用于外部脚本文件。 放在页面底部仍是最佳选择。
4、异步脚本
async属性:与defer作用类似,不同点是async的脚本不能保证按照指定他们的先后顺序执行。
二、嵌入代码和外部文件
虽然嵌入式js代码没有问题,但是最好还是用调用外部文件。优点如下:
可维护性:把所有js文件放在一个文件夹下,便于维护。在不触及HTML标记的情况下编辑js代码。
可缓存:若两个页面都是用同一个文件,那么文件只用下载一次。加快页面加载速度。
适应未来:通过外部文件来包含js无需使用XHTML或注释hack。html和xhtml包含外部文件的语法是相同的。
三、文档模式
混杂模式:会让ie的行为与ie5相同。
标准模式:会让ie的行为更接近标准行为。 例:<! DOCTYPE html >
虽然两种模式主要影响css,但在某种情况下回影响js的解释执行。
四、<noscript>元素
为了让不支持js的浏览器平稳退化。这个元素可以包含能够出现在文档<body>中的任何html元素(<script>元素除外)。
包含的内容只有在浏览器不支持脚本,或脚本被禁用的情况下才会显示。
五、小结
第3章——基本概念
任何语言的核心都会描述这门语言最基本的工作原理。而描述的内容通常要涉及这门语言的语法、操作符等基本概念。
ECMA-262通过叫做ECMAScript的‘伪语言’为我们描述了JavaScript的所有这些基本概念。
1.1 语法
ECMAScript的语法大量借鉴C及其他类C语言(java等)的语法。但ECMAScript的语法更加宽松。
1.1.1 区分大小写
ECMAScript中的一切(变量、函数名、操作符)都区分大小写。
1.1.2 标识符
所谓标识符,就是指 变量、函数、属性的名字,或者函数的参数。可按下列格式规则组合的一个或多个字符:
□ 第一个字符必须是一个字母、下划线、或一个美元符号($);
□ 其他字符可以是字母、下划线、美元符号或数字。
按照惯例,ECMAScript 标识符采用驼峰大小写格式,为了与ECMAScript内置函数和对象命名格式保持一致,可以将其当作一种最佳实践。 注:不能把关键字、保留字、true、false、null作为标识符。
1.1.3 注释
ECMAScript使用C风格的注释,包括单行注释和块级注释。
// 单行注释
/* 块级注释 */
1.1.4 严格模式
严格模式是为js定义了一种不同的解析与执行模型。在严格模式下,对某些不安全的操作会抛出错误。
在整个脚本中启用严格模式,只需在顶部添加 " use strict";
这是一个编译指示,告诉支持的js引擎切换到严格模式。
也可以指定函数与在严格模式下执行 在函数体中第一行添加 " use strict";
在严格模式下,js的执行结果会有很大的不同。
1.1.5 语句
ECMAScript中的语句以一个分号结尾;没有分号,则由解析器确定语句的结尾。(最好加上分号)
可以使用C风格的语法把多余的语句组合到一个代码块中{}
在控制语句中使用代码块可以让编码意图更加清晰,而且也能降低修改代码时出错的几率。
1.2 关键字和保留字
一般来说,最好都不要使用关键字和保留字作为标识符和属性名,以便于将来的ECMAScript版本兼容。
1.3 变量
ECMAScript的变量是松散类型的,即可以用来保存任何类型的数据。换句话说,每个变量仅仅是一个用来保存值得占位符而已。定义变量时要用var操作符(关键字),后跟变量名(一个标识符)。
var message; 该行代码定义了一个名为message的变量,该变量可以用来保存任何值。(像这样未经过初始化的变量,会保存一个特殊的值——undefined)
var message = 'hi'; 再此,变量中保存了一个字符串值‘hi’。这样初始化变量并不会把他标记为字符串类型;初始化的过程就是给变量赋一个值。
注意:使用var操作符定义的变量将成为定义该变量的作用域中的局部变量。即若在一个函数中使用var定义一个变量,那么这个变量在函数退出后就会被销毁。 若省略var操作符,将会创建一个全局变量。在函数外部任何地方被访问到。
在严格模式下,不能定义名为eval或arguements的变量,否则会导致或语法错误。
1.4 数据类型
ECMAScript中有5简单数据类型(也成为基本数据类型):undefined、null、boolean、number、string。
还有1中复杂数据类型——Object,Object本质上是由一