第一章 JavaScript的简介
第二章 在HTML中使用JavaScript
把JavaScript插入到HTML页面中要使用<script>元素。使用这个元素可以把JavaScript嵌入到HTML页面中,让脚本与标记混合在一起;也可以包含外部的JavaScript文件。而我们需要注意的地方有:
- 在包含外部JavaScript文件时,必须将src属性设置为指向相应文件的URL。而这个文件既可以是与包含它的页面位于同一个服务器上的文件,也可以是其他域中的文件。
- 所有<script>元素都会按照它们在页面中出现的先后顺序依次被解析。在不适用defer和async属性的情况下,只有在解析完前面的<script>元素中的代码之后,才会开始解析后面<script>元素中的代码。
- 由于浏览器会先解析完不适用defer属性的<script>元素中的代码,然后再解析后面的内容,所以一般把<script>元素放在页面最后。
- 使用defer属性可以让脚本在文档完全呈现出来之后再执行。延迟脚本总是按照指定它们的顺序执行。
- 使用async属性可以表示当前脚本不必等待其他脚本,也不必阻塞文档呈现。不能保证异步脚本按照它们在页面中出现的顺序执行。
- 使用<noscript>元素可以指定在不支持脚本的浏览器中显示的替代内容。但在启动脚本的情况下,浏览器不会显示<noscript>元素中的任何内容。
第三章 基本概念
3.1 语法
3.3 变量
ECMAScript的变量是松散类型的,所谓松散类型就是可以用来保存任何类型的数据。定义变量使要使用var操作符。因此可以修改变量值的同时修改值得类型
例如:
var message = "hi";
message = 100; //有效,但不推荐
有一点必须注意,即用var操作符定义的变量将成为定义该变量的作用域中的局部变量。
3.4 数据类型
3.5 操作符
3.6 语句
3.6.1 if语句
3.6.2 do-while语句
3.6.3 while语句
3.6.4 for语句
3.6.5 for-in语句
- for-in语句是一种精准的迭代语句,可以用来枚举对象的属性。
- 通过for-in循环输出的属性名的顺序是不可预测的。建议在使用for-in循环之前,先检测确认该对象的值不是null或undefined。
3.6.6 label语句
3.6.7 break和continue语句
3.6.8 with语句
- 作用是将代码的作用域设置到一个特定的对象中,简化多次编写同一个对象的工作。
- 严格模式下不允许使用with语句
3.6.9 switch语句
3.7 函数
- ECMAScript中没有函数签名的概念,因为其函数参数是以一个包含零或多个值的数组的形式传递的。
- 可以向ECMAScript函数传递任意数量的参数,并且可以通过arguments对象来访问这些参数。
- 由于不存在函数签名的特性,ECMAScript函数不能重载。
第四章 变量、作用域和内存问题
4.1 基本类型和引用类型的值
- 动态的属性:只能给引用类型值动态地添加属性,以便将来使用。
- 复制变量值:基本类型值和引用类型值得区别。
- 参数的传递:ECMAScript中所有函数的参数都是按值传递的。
- 检测类型:用typeof检测对象只会返回"object",所以提供了instanceof操作符,其语法如下:
result = variable instanceof constructor
如果引用类型是Object,返回true;
4.2 执行环境以及作用域
var color = "blue";
function changeColor() {
var anotherColor = "red";
function swapColors() {
var tempColor = anotherColor;
anotherColor = color;
color = tempColor;
}
swapColors();
}
changeColor();
这个例子的作用域链为
- 可以通过try-catch语句的catch块 和 with语句来延长作用域链
- javascript没有块级作用域,对于块级作用域的语言来说,for语句初始化变量的表达式所定义的变量,只会存在于循环的环境之中。而对于javascript来说,由for语句创建的变量i即使在for循环执行结束后,也依旧会存在于循环外部的执行环境。