第一章:javaScript简介
1.javaScript的组成
javaScript由ECMAScript、DOM(文档对象模型)、BOM(浏览器对象模型)构成。
ECMAScript:提供核心语言功能
DOM:提供访问和操作网页内容的方法和接口。
BOM:提供与浏览器交互的方法和接口。
当前主要有5个主流浏览器:IE、Firefox、 Chrome、Safari、Opera
第二章:HTML中使用JavaScript
1.script元素
1)有两种使用方式:
-
直接在html页面中嵌入
包含在<script>元素内部的JavaScript代码将从上至下依次解释,在解释器对<script>元素内部所有代码求值完毕之前,页面中的其余内容都不会被浏览器加载和显示。
-
引入外部JavaScript文件,src属性是必须的,指向外部JavaScript文件的链接。
2)<script>标签的位置
按照惯例,是将<script>放到<head>中,目的是将所有外部文件的引用放在相同的地方。
但是,在<head>中包含所有的JavaScript文件,意味着所有的JavaScript代码被下载、解析和执行完成以后,才能开始呈现页面内容。(浏览器遇到body才呈现内容)。对于很多JS页面代码的页面来说,会导致浏览器呈现页面出现明显的延迟,延迟期间一片空白。
为避免这个问题,现在一般将JavaScript引用放在<body>元素中页面内容之后。
3)延迟脚本
<script>元素中的defer属性:表示告诉浏览器立即下载,但延迟执行。
4)异步脚本
<script>元素中async属性:不让页面等待脚本下载和执行,从而异步加载页面其他内容。
2.文档模式
混杂模式:在文档开始处没有发现文档类型声明,所有的浏览器都会默认开启混杂模式。
主要影响CSS内容的呈现,有些情况下会影响到JavaScript的解释执行。
标准模式:
第三章:基本概念
1.语法
1)区分大小写
2)标识符
标识符是按照如下规则
- 首字符:字母、下划线、$(也就是不能以数字开头)
- 其他字符:字母、数字、下划线、$
3)严格模式
ES5引入了严格模式,严格模式是为JavaScript定义了一种不同的解析与执行模型。对于ES3中一些不确定的行为将得到处理,对于某些不安全的操作也会抛出错误。整个脚本顶部添加如下代码:
这是一个编译指示,用于告诉引擎切换到严格模式。
也可以指定函数在严格模式下执行
4)语句以分号结尾
2.关键字和保留字
3.变量
ES的变量是松散类型的,松散类型就是可以用来保存任何类型的数据。每个变量仅仅是一个用于保存值的占位符。
var message;
未经过初始化的变量,会保存一个特殊的值--undefined
也可以直接初始化变量
var message = “hi”;
注意:
-
使用var定义的变量为局部变量,在函数中使用var定义一个变量,这个变量在函数退出后就会被销毁。
-
省略var操作符,变量就成了全局变量,能够在函数外的任何地方被访问到。
-
但是,不推荐省略var操作符定义全局变量,在严格模式下会抛出ReferenceError错误。
4.数据类型
1)Undefined:如果这个值未被定义。
Undefined类型只有一个值:undefined,在使用var声明变量但未对其加以初始化时,这个变量的值就是undefined。
2)Null:对象为空
Null类型只有一个值:null,null表示一个空对象指针,typeof操作符检测null时返回object
如果定义的变量准备用来保存对象,最好将变量初始化为null。
undefined值是派生自null值,因此
3)Boolean:如果这个值是布尔值。
该类型有两个值:true,false;true不一定是1,false不一定是0。
转型函数Boolean()
if语句自动执行Boolean转换
4)Number:如果这个值是数。
var intNum=55;
var octalNum=070;//八进制0开头
var octalNum=079;//无效的八进制会被解析为79
注意:八进制在严格模式下无效,会导致支持的JavaScript引擎抛出错误。
var hexNum=0xA; //十六进制0x开头
- NaN:非数值是一个特殊的数值,这个数值表示一个本来要返回数值的操作数未返回值的情况。
比如,在其他编程语言中,任何数除以0都会导致错误,停止代码执行。在ES中,任何数除以0会返回NaN。- 任何涉及NaN的操作都会返回NaN
-
NaN与任何值都不相等,包括NaN本身
-
isNaN()函数来判断这个参数是否不是数值
-
数值转换
三个函数可以把非数值转换为数值:Number()、parseInt()、parseFloat()。
Number()可以用于任何数据类型
parseInt()、parseFloat()用于将字符串转换成数值。
5)String:如果这个值是字符串。 -
字符串可以由双引号或单引号表示:
-
ES中字符串是不可变的:
-
转换为字符串
1)toString()方法,但是null和undefined值没有这个方法
2)不知道要转换的值是不是null和undefined时,使用String()方法,能够转换任何类型的值。
6)Object:如果这个值是对象。
var o=new Object();
Object的每个实例都具有下列属性和方法
5.操作符
1)一元操作符
i++,i--,++i,--i
-
一元加操作符
-
一元减操作符
2)位操作符
负数是以二进制补码进行存储的:
-
按位非(~)
这里num2的值是补码,所以是一个负数,通过减一取反,可以得到绝对值为11010,即26,那么num2就是-26。
按位非的本质:操作数的负值-1
-
按位与(&)
两个数值对应位都是1时返回1,任何一位是0,结果都是0。
-
按位或(|)
有一个位是1就返回1,在两个位都是0才返回0。
-
按位异或(^)
相异为1,相同为0
-
左移(<<)
-
有符号右移(>>)
-
无符号右移(>>>)
无符号右移是以0来填充空位
正数而言,和有符号结果相同。
对于负数而言
3)布尔操作符
逻辑非(!)、逻辑与(&&)、逻辑或(||)
4)乘性操作符
乘法()、除法()、求模(%)
5)加性操作符
加法+、减法-
6)关系操作符
<,>,<=,>=
7)相等操作符 -
相等不相等(==,!=)
先转换操作数,再比较
-
全等不全等(===,!==)
不转换就相等的情况返回true。
8)条件操作符
9)赋值操作符=
10)逗号操作符
6.语句
1)if语句
2)do-while
3)while
4)for
5)for-in
注意:
如果表示要迭代的对象的变量值为null或undefined,for-in语句会抛出错误。ES5更正了这一情况,不会再抛出错误,只是不执行循环体。为了保证最大限度的兼容性,在使用for-in循环之前,先检测确认该对象的值不是null或undefined。
6)lable语句
7)break和continue
break:跳出循环
continue:跳出本次循环继续从循环顶部开始下一次循环。
8)with语句
9)switch语句
通过为每个case后面添加一个break语句,可以避免同时执行多个case代码的情况。
如果要混合几种情形:
7.函数
ES中函数在定义时不必指定返回值,任何函数都可以通过return来实现返回值。
函数在执行return语句之后就会停止并立即退出。
-
理解参数
ES函数不在乎传进来多少参数,也不介意传入的是什么类型。即便定义的函数只接收两个参数,在调用时未必一定传入两个参数。
ES参数内部使用一个数组来表示的,在函数体内可以通过arguments对象访问参数数组,即使定义时没有写参数,调用时也可以直接将参数值放入。
-
没有重载